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

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

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

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

Q&A

解決済

1回答

5027閲覧

Googleフォームで、ファイルを添付して自動返信メールを送りたい

rooibos_hanako

総合スコア11

Google Apps Script

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

0グッド

1クリップ

投稿2019/06/09 10:17

前提・実現したいこと

商品モニターの募集ページで、Googleフォームを使い、
応募してくれた人にGoogleDriveにある商品説明書を添付して自動返信したいと思っています。
スプレッドシートのスクリプトエディタに書いています。

発生している問題・エラーメッセージ

自動返信のみではこちらのページを参考にし、うまくいきました。
https://liapoc.com/new-google-form.html

添付についてはこちらのサイトなどを参考にさせていただき、
https://qiita.com/mistolteen/items/404c10657b1b27007a3c
以下を追加しましたが、うまくいきません。

//GoogleDriveからファイルを取得 var files = DriveApp.getFilesByName('説明書.pdf').next(); // メール送信に{attachments:files}を追加 MailApp.sendEmail( to, subject, body, options, {attachments:[files]}

スプレッドシートでのエラーの出し方がわかりませんでしたが、
デバッグをしたら以下の行で止まっているようです。

MailApp.sendEmail( to, subject, body, options, {attachments:[files]} );

初めてづくしで往生しています。
どなたか教えていただけると幸いです。

該当のソースコード

function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "[お問い合わせありがとうございます。]"; var body = "お問い合わせありがとうございます。\n\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n\n" + "後ほど担当者よりご連絡させていただきます。"; // 入力カラム名の指定 var NAME_COL_NAME = '名前'; var MAIL_COL_NAME = 'メールアドレス'; // メール送信先 var admin = "admin@example.com"; // 管理者(必須) var sendername = "株式会社AAAA";//送信者名(必須) var cc = ""; // Cc: var bcc = admin; // Bcc: var reply = admin; // Reply-To: var to = ""; // To: (入力者のアドレスが自動で入ります) //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer; // 送信先オプション var options = {name: sendername}; if ( cc ) options.cc = cc; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; //GoogleDriveからファイルを取得 var files = DriveApp.getFilesByName('説明書.pdf').next(); // メール送信に{attachments:files}を追加 if ( to ) { MailApp.sendEmail( to, subject, body, options, {attachments:[files]} ); }else{ MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

sendEmailの引数が間違っています。
optionsのなかにattachments が入らないと動かないはずです。
試してみてください!

下記、リファレンス載せておきます!
MaillApp::sendEmail

js

1 MailApp.sendEmail( 2 to, 3 subject, 4 body, 5 { 6 attachments: [files] 7 } 8);

投稿2019/06/09 10:27

fumito_94

総合スコア679

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

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

fumito_94

2019/06/09 10:35 編集

google driveのIDをフォームから取得できると思うので、それがあれば下記のコードで取得して、`attachments` につければファイル名を気にしなくてもよさそうですね。 ``` $file = DriveApp.getFileById(file_id); ```
rooibos_hanako

2019/06/09 11:00

ありがとうございます!! optionsの中に入るんだったんですね… options.attachments = files; こちらにしたら、無事ファイルを添付して返信できました。 勉強になりました。 IDの件もありがとうございます。 運用面を少し考えてどちらにするか検討します!
fumito_94

2019/06/09 11:06

解決できてよかったです! オプションだと結構わかりにくいこと多いですよね。 私もこの前使って知ったところだったので、お役に立ててよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問