実現したいこと
GASでの自動メール送信にて、
太字や色付き等の書式を反映させたい。
前提
スプレッドシートからのGASでの自動一斉メール送信プログラムを作りましたが、
太字や色付きなどが反映されない。
スプレッドシートで名前やアドレスなどを記入しそれを取っています。
メール本文はドキュメントに書いてあるものを指定しています。
スプレッドシートに可変的に動かす、名前や会社名などを記入して、
メール本文では自動で可変される仕組みです。
該当のソースコード
GoogleAppScript
1function SendHTMLMail2() { 2 3 const ss = SpreadsheetApp.getActiveSpreadsheet(); 4 const sheet = ss.getSheetByName('アドレス帳(添付なし)'); //シート名指定 5 const lastRow = sheet.getLastRow(); 6 const values = sheet.getRange(1, 1, lastRow, 9).getValues(); 7 const doc = DocumentApp.openById('******'); //ドキュメントIDを入力 8 const docText = doc.getBody().getText(); 9 const value = sheet.getRange("N8").getValue(); 10 const subject = value; //メールの件名(セル指定) 11 const fromName = 'なまえ'; //送信者名表示 12 const options = {name: fromName}; //添付ファイル無の時用 13 14 for(let i=1; i<values.length; i++){ 15 if(values[i][7]=='〇' && values[i][6]!='送信済み'){ //判定が〇かつデータ2が送信済みでなければ処理続行 16 const mailAddress = values[i][2]; //メールアドレス 17 const name = values[i][1]; //名前 18 const company = values[i][3]; //会社・施設名 19 const department = values[i][4]; //部署名 20 const data1 = values[i][5]; //データ1 21 const data2 = values[i][6]; //データ2 22 const judge = values[i][7]; //判定 23 const check = values[i][8]; //送信チェック 24 const body = docText 25 .replace('{'+values[0][1]+'}', name) 26 .replace('{'+values[0][3]+'}', company) 27 .replace('{'+values[0][4]+'}', department) 28 .replace('{'+values[0][5]+'}', data1) 29 .replace('{'+values[0][6]+'}', data2) 30 .replace('{'+values[0][7]+'}', judge) 31 .replace('{'+values[0][8]+'}', check); 32 GmailApp.sendEmail(mailAddress, subject, body, options); 33 sheet.getRange(i+1, 10).setValue("送信済み"); //送信成功後、送信チェックに入力 34 } 35 } 36} 37
試したこと
function SendHTMLMail2() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('アドレス帳(添付なし)'); //シート名指定
const lastRow = sheet.getLastRow();
const values = sheet.getRange(1, 1, lastRow, 9).getValues();
//↓修正した部分
var doc = '******'
var url = 'https://docs.google.com/feeds/download/documents/export/Export?id=' + doc + '&exportFormat=html';
var storageUsed = DriveApp.getStorageUsed(); //これが無いと認証エラー
var param = { method: 'get',
headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
muteHttpExceptions: true}; //muteHttp~はエラー回避用
var html = UrlFetchApp.fetch(url, param).getContentText();
//-----↑
const value = sheet.getRange("N8").getValue(); //件名のセル指定
const subject = value; //メールの件名(セル指定)
const fromName = 'なまえ'; //送信者名表示
const options = {name: fromName,htmlBody: html};
for(let i=1; i<values.length; i++){
if(values[i][7]=='〇' && values[i][6]!='送信済み'){ //判定が〇かつデータ2が送信済みでなければ処理続行
const mailAddress = values[i][2]; //メールアドレス
const name = values[i][1]; //名前
const company = values[i][3]; //会社・施設名
const department = values[i][4]; //部署名
const data1 = values[i][5]; //データ1
const data2 = values[i][6]; //データ2
const judge = values[i][7]; //判定
const check = values[i][8]; //送信チェック
const body = html //修正箇所
.replace('{'+values[0][1]+'}', name)
.replace('{'+values[0][3]+'}', company)
.replace('{'+values[0][4]+'}', department)
.replace('{'+values[0][5]+'}', data1)
.replace('{'+values[0][6]+'}', data2)
.replace('{'+values[0][7]+'}', judge)
.replace('{'+values[0][8]+'}', check);
GmailApp.sendEmail(mailAddress, subject, body, options);
sheet.getRange(i+1, 10).setValue("送信済み"); //送信成功後、送信チェックに入力
}
}
}
上記にて試しましたが、ドキュメントに記載した内容をそのまま反映されたので、
色付きや太字などはできたのですが、今度は可変的に動くべきところが反映されずという事態になってしまいました。
{名前} {会社名}としているところが左記のまま表示されています。
本来、スプレッドシートにある名前や会社名が反映されるはずでした。。。
補足情報(FW/ツールのバージョンなど)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/07/13 23:56
2023/07/14 00:30
2023/07/14 00:38
2023/07/14 00:53
2023/07/14 02:46
2023/07/14 03:06
2023/07/16 23:38
2023/07/17 00:31
2023/07/17 06:57
2023/07/17 07:42
2023/07/17 07:59
2023/07/17 11:07