①実現したいこと
- Spreadsheetでメール本文のひな形を作成
- 上記の本分は<br>や<strong>などのHTMLタグを含まないでいいようにしたい
- GASでひな形の内容を同Spreadsheet内の顧客情報データ情報を参照して一部置き換え
- Googleドライブからインライン表示用の画像を参照しメール本文に挿入
- Gmailにメールの下書きを保存
②困っていること
1.Spreadsheetで入力する形式のままHTMLメールが作成したい(<br>などをスプシに入れたくない)
2.HTMLメールにすると{{企業名}}などの置き換え用文字の置き換え方がわからない
=A:スプシのデータでHTMLメールにすると置き換えはできるが改行などが反映されない一続きのメールになる
=B:HMTLファイルを別途作成しそれを読み込むと改行や画像の挿入はできているがスプシの{{企業名}}などの置き換えがされていない
このAとBをうまく両立出来る方法があれば知りたいです。
HTML ⇔ GAS の値の受け渡し方法の問題なのかとは思っていますが......
③該当のソースコード
JavaScript
1function mailHTML3() { 2 3 let ss = SpreadsheetApp.getActiveSpreadsheet(); 4 let sheet = ss.getActiveSheet(); //アクティブなスプレッドシート・シートを取得 5 let range = sheet.getDataRange(); 6 let data = range.getValues(); 7 8 //Googleドライブから画像を取得する。 9 const imgA = DriveApp.getFileById('Googleドライブの画像のID').getBlob(); 10 11 var body_html = HtmlService.createHtmlOutputFromFile("メール本文に<br>などを入れたHTMLファイル※本来は使いたくない").getContent(); 12 13 const options = { 14 cc: 'aaa@example.com,bbb@example.com', 15 htmlBody: body_html, 16 inlineImages: { 17 inlineImg: imgA 18 } 19 } 20 21 //Spreadsheetのメール本文を顧客情報を元に差し替え。配列はSpreadsheetのセルの位置 22 for(let i = 2; i < data.length; i++){ 23 24 let recipient = data[i][0]; // 宛先 25 let company = data[i][1]; // 企業名 26 let family_name = data[i][2]; // 宛名_姓 27 let name = data[i][4]; // 宛名 28 let body = data[i][5]; // 本文 29 let subject = data[i][6]; // 件名 30 31 32 //企業名の置き換え 33 body = body.replace(/{{企業名}}/g,company); 34 //宛名の置き換え 35 body = body.replace(/{{宛名}}/g,name); 36 //宛名_姓の置き換え 37 body = body.replace(/{{宛名_姓}}/g,family_name); 38 //署名欄の置き換え 39 body = body.replace(/{{署名欄}}/g,signature); 40 //件名の宛名_姓の置き換え 41 subject = subject.replace(/{{宛名_姓}}/g,family_name); 42 43 44 body_html = body 45 46 // GmailApp.createDraft(recipient,subject,body,options); 47 GmailApp.createDraft(recipient,subject,body_html,options); 48 49 50 };
④差し替え元のメール本文(抜粋)
{{企業名}}
{{宛名}} 様
いつもお世話になっております。
株式会社●●の {{送信者_姓}} と申します。
{{宛名_姓}} 様には、以前我々のメンバー {{名刺交換者_姓}}とやり取りがございましたので、
今回はお得な情報をお伝えいたします。
⑤追記情報1(7/12 13:20)
おかげさまでスプレッドシート状のデータとのリプレイスと、スタイルの適用は対応できました。
あとは現在添付されている画像をインライン表示できれば万々歳なのですが、
>画像に関してはプレースホルダを利用してreplaceかけるのがいいかと思います。
この辺についてもう少しかみ砕いてご助言をいただけますと大変ありがたいのですが....
⑤追記情報2(7/12 15:15)※希望通りのものが実現できました
※RichTextAppという教えていただいたライブラリを事前にインストール済
https://github.com/tanaikech/RichTextApp#richtexttohtmlforspreadsheet
JavaScript
1 2function gmAuto(){ 3 let ss = SpreadsheetApp.openById("スプレッドシートのID"); 4 let sheet = ss.getSheets()[6]; 5 let range = sheet.getDataRange(); 6 let data = range.getValues(); 7 8 9 //Googleドライブから画像を取得する。 10 const imgA = DriveApp.getFileById('インラインに挿入する画像のID').getBlob(); 11 12 13 // 情報を取りたいi行目がスプレッドシートの3行目から始まるので0,1,2の「2」からスタート 14 for(let i = 2; i < data.length; i++){ 15 16 let recipient = data[i][0]; // 宛先 17 let company = data[i][1]; // 企業名 18 let family_name = data[i][2]; // 宛名_姓 19 let name = data[i][4]; // 宛名 20 // let body = data[i][5]; // 本文 ※今回は使用せず。プレーンテキストの場合はこれでもOK 21 let body = RichTextApp.RichTextToHTMLForSpreadsheet({range : sheet.getRange('F3')}); 22 let subject = data[i][6]; // 件名 23 24 25 //スプレッドシートの本分内の{{プレースホルダ}}の中身の置き換え(一部) 26 body = body.replace(/{{企業名}}/g,company); 27 body = body.replace(/{{宛名}}/g,name); 28 body = body.replace(/{{宛名_姓}}/g,family_name); 29 body = body.replace(/{{アポ候補日時}}/g,appoDate); 30 subject = subject.replace(/{{宛名_姓}}/g,family_name); 31 32 // プレースホルダ{{画像}}で本文の内容をHTMLのimgタグに差し替え 33 body = body.replace(/{{画像}}/g,"<img src='cid:inlineImg'>"); 34 35 36 const options = { 37 cc: 'aaa@example.com,bbb@example.com', 38 htmlBody: body, 39 inlineImages: { 40 inlineImg: imgA 41 } 42 } 43 44 GmailApp.createDraft(recipient,subject,body,options); 45 46 }; 47 48}
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/07/12 04:26
2023/07/12 04:58 編集
2023/07/12 06:28