質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2074閲覧

GASでHTMLメールに画像挿入とファイルを添付したい

moge333

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/02/12 18:39

編集2023/02/13 09:32

前提・実現したいこと

GASでメールを送信する本文に画像を挿入し、ファイルを添付して送信したいです。
挿入画像と、添付ファイルは毎回添付する数が異なる(0~5個程度)ことから、配列指定して取得しています。
配列により取得したログは、それぞれ下記のようになっています(各ファイルが3個の場合です)。

console.log(tempuList); → tempu1,tempu2,tempu3
console.log(inImgList); → blob1:imgg1,blob2:imgg2,blob3:imgg3

最後に、メールを送るため、optionの設定をしているのですが、
下記の「送信がうまくいく場合」ように記載すれば送信できるのですが、
配列で指定して実行配列指定の場合すると、エラーになってしまいます。

エラー Exception: Invalid argument: attachments

書き方や配列の考え方で間違えているところがあると思うのですが解決できず。。。
わかりづらい説明で恐縮なのですが、ご指導いただけると大変助かります。

該当のソースコード

GAS

1//送信がうまくいく場合 2MailApp.sendEmail(address, subject, body, { 3   inlineImages: {blob1:imgg1,blob2:imgg2,blob3:imgg3}, 4   attachments: [ tempu1,tempu2,tempu3] 5}); 6 7//配列指定の場合(GASを実行してもうまくいかない。) 8let options = { inlineImages:inImgList ,attachments : tempuList}; 9MailApp.sendEmail(address, subject, body, options ) 10 11//optionsの console.log(options)は、下記のようになります。 12{ inlineImages: 'blob1:imgg1,blob2:imgg2,blob3:imgg3', attachments: 'tempu1,tempu2,tempu3' } 13

追記

部分的な箇所の質問でわかりづらいと思いましたのでソース全体を追記しました。
まだエラーがあったり、かなり泥臭いコードだったりで恐縮ですが、ご指導いただけますとありがたいです。
どうぞよろしくお願いします。

該当のソースコード(全体)

GAS

1 2function sendMail() { 3 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 var dtsheet = ss.getSheetByName('シート1'); 6 var d = dtsheet.getLastRow(); //ラスト行取得 7 8 var name = dtsheet.getRange(d, 1).getValues(); 9 var subject = dtsheet.getRange(d, 2).getValues(); 10 var mail = dtsheet.getRange(d, 3).getValues(); 11 var pic1 = dtsheet.getRange(d, 4).getValues(); 12 var pic2 = dtsheet.getRange(d, 5).getValues(); 13 var pic3 = dtsheet.getRange(d, 6).getValues(); 14 var shiryou1 = dtsheet.getRange(d, 7).getValues(); 15 var shiryou2 = dtsheet.getRange(d, 8).getValues(); 16 var shiryou3 = dtsheet.getRange(d, 9).getValues(); 17 18 var attached_files = []; 19 var inlineimg_files = []; 20 21 //挿入画像処理 22 if (dtsheet.getRange(d, 4).isBlank()){ ; } 23 else{ 24 var img1 = DriveApp.getFilesByName(pic1).next(); 25 var imgg1 = DriveApp.getFileById(img1.getId()).getBlob(); 26 var blob_inline1 = '<img src=cid:blob1>'; 27 inlineimg_files.push('blob1:imgg1'); 28 } 29 30 if ( dtsheet.getRange(d, 5).isBlank()){ ; } 31 else{ 32 var img2 = DriveApp.getFilesByName(pic2).next(); 33 var imgg2 = DriveApp.getFileById(img2.getId()).getBlob(); 34 var blob_inline2 = '<img src=cid:blob2>'; 35 inlineimg_files.push('blob2:imgg2'); 36 } 37 38 if ( dtsheet.getRange(d, 6).isBlank()){ ; } 39 else{ 40 var img3 = DriveApp.getFilesByName(pic3).next(); 41 var imgg3 = DriveApp.getFileById(img3.getId()).getBlob(); 42 var blob_inline3 = '<img src=cid:blob3>'; 43 inlineimg_files.push('blob3:imgg3'); 44 } 45 console.log(inlineimg_files) 46 47 //添付ファイル処理 48 if(dtsheet.getRange(d, 7).isBlank()){ ; } 49 else{ 50 var tempu1 = DriveApp.getFilesByName(shiryou1).next(); 51 var tmpu1ID = tempu1.getId(); 52 attached_files.push('tempu1'); 53 } 54 if(dtsheet.getRange(d, 8).isBlank()){ ; } 55 else{ 56 var tempu2 = DriveApp.getFilesByName(shiryou2).next(); 57 var tempu2ID = tempu2.getId(); 58 attached_files.push('tempu2'); 59 } 60 if (dtsheet.getRange(d, 9).isBlank()){ ; } 61 else{ 62 var tempu3 = DriveApp.getFilesByName(shiryou3).next(); 63 var tempu3ID = tempu3.getId(); 64 attached_files.push('tempu3'); 65 } 66 console.log(attached_files) 67 68 var body = 69 name + "様" + "<br>" + 70 "画像挿入" + "<br>" + 71 "写真1" + "<br>" + blob_inline1 + "<br>" + 72 "写真2" + "<br>" + blob_inline2 + "<br>" + 73 "写真3" + "<br>" + blob_inline3 + "<br>" + 74 "添付ファイル:" + attached_files+ "<br>"; 75 76 77 var options = { 78 inlineImages : inlineimg_files, 79 attachments: attached_files,}; //本当はこのoptions で指定したい。 80 81 MailApp.sendEmail({ 82 to: mail, 83 subject: subject, 84 htmlBody: body, 85 options: options, 86 87 //inlineImages: { blob1:imgg1, blob2:imgg2, blob3:imgg3}, 88 //attachments: [ tempu1,tempu2,tempu3 ] 89 90 }); 91 92} 93

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2023/02/12 23:37 編集

> attachments: 'tempu1,tempu2,tempu3' tempuList が配列になってないと思われます。tempuList を作るコードを開示しましょう。 おそらく inImgList もおかしいです。
moge333

2023/02/13 09:33

ご確認ありがとうございます。 いろいろ間違っている気はしているのですが、コード全体を追加しました。 コメントなどいただけると大変s何項になります。 どうぞよろしくお願いいたします。
guest

回答1

0

ベストアンサー

https://developers.google.com/apps-script/reference/mail/mail-app?hl=ja#sendemailmessage

inlineImagesプロパティは公式のドキュメントによると配列ではなく「画像キー(String)から画像データ(BlobSource)へのマッピングを含む JavaScript オブジェクト。」にしなければなりません。

var inlineimg_files = [];

ここは var inlineimg_files = {}; です。

var imgg1 = DriveApp.getFileById(img1.getId()).getBlob(); var blob_inline1 = '<img src=cid:blob1>'; inlineimg_files.push('blob1:imgg1');

変数 imgg1 が何にも使われてないことに疑問を持ちましょう。ここの最後の行は、

inlineimg_files['blob1'] = imgg1;

です。imgg2 imgg3 も同様です。


var tempu1 = DriveApp.getFilesByName(shiryou1).next(); var tmpu1ID = tempu1.getId(); attached_files.push('tempu1');

公式のドキュメントによると、attachments プロパティで指定するのは「メールで送信するファイルの配列」です。よって、ここで文字列を push() してはいけません。この最後の行は、attached_files.push(tempu1); (文字列ではなくファイルオブジェクトを追加) です。tempu2 tempu3 も同様です。

投稿2023/02/13 12:22

int32_t

総合スコア20888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moge333

2023/02/13 16:25

ご丁寧なお返事をいただき、大変ありがとうございます。 公式ページも見ながら考えてみました。 ご指摘いただいていたとおり、 inlineImagesとattachmentsとオブジェクトと配列が一緒になってしまっていたようです。 一般的な話であったり、よく公式を読めばわかることと思いつつ、勉強が足りないと反省です。。。 GASコードについては、ご指導いただいた内容で修正したところ、うまく動いてくれました。 大変参考になりました。ありがとうございました。 当方のメッセージに早々にご対応していただき、大変ありがとうございます。 ベストアンサーとさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問