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

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

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

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

Q&A

解決済

2回答

3657閲覧

複数の宛先にそれぞれ別々のPDF添付ファイル(フォルダー)を送信することはできますか

pee.cyon.cyon

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2018/06/20 07:16

編集2018/06/26 03:09

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

初心者です。
複数の人に、それぞれ別々のPDFファイル(コピー機で撮ってドライブに保存したもの)を
氏名・本文をドキュメントに差し込み、PDFのファイルは添付してGmailで送信することができるか
ご教示いただけないでしょうか。
スプレッドシートには、会社名・氏名・メールアドレス・PDF添付ファイルのフォルダーID
を記入しております。
なにとぞよろしくお願いいたします。

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

下記のソースコードは、別々の宛先に氏名・本文を差し込んで、同じフォルダーIDのPDF添付ファイル(同内容のもの)を 一斉送信することが可能です。 希望は、別々の宛先に氏名・本文を差し込んで、<別々のフォルダーID>のPDF添付ファイル(<別内容のもの>)を 差し込んで送信することなのですが、その方法がわかりません。 <別内容>の添付ファイルを差し込むにはどうしたらよいか、ご教示願えないでしょうか。

該当のソースコード

function send_mail(){ /* スプレッドシートのシートを取得と準備 */ var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* ドキュメントを取得する */ var docTest=DocumentApp.openById("-----------"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 /* メール表題、fromアドレス、差出人名を準備 */ var strSubject="テストタイトル"; //表題 var strSender="名前"; //差出人 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strSyokusyu=mySheet.getRange(i,1).getValue(); var strKarihaizokusaki=mySheet.getRange(i,2).getValue();  var strSekininsha=mySheet.getRange(i,3).getValue();  var strShimei=mySheet.getRange(i,4).getValue();  var strFurigana=mySheet.getRange(i,5).getValue(); var strTo=mySheet.getRange(i,6).getValue();  var strfile=mySheet.getRange(i,7).getValue(); var strBody=strDoc.replace(/{●●}/,strSyokusyu).replace(/{●●}/,strKarihaizokusaki).replace(/{●●}/,strSekininsha).replace(/{●●}/,strShimei).replace(/{●●}/,strFurigana); //社名、姓名を置換 Logger.log(strBody); //ドキュメントの内容をログに表示 var folder=DriveApp.getFolderById('--------------'); var files=folder.getFiles(); var attachments=[]; while(files.hasNext()){ attachments.push(files.next()); } GmailApp.sendEmail( strTo, strSubject, strBody, {attachments:attachments} ); } } ### 試したこと ドキュメントの本文に、氏名等を差し込んで、同じ内容の添付ファイルを一斉送信することは可能です。 宛先ごとに個別の添付ファイルをつける方法が見つかりません。ご教示願えれば幸いです。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

papinianus

2018/06/20 10:43

うまくいかない、関数が実行できない、というのが具体的にどういう状況かわかりません。添付なしで送信できるなら関数は実行できるはず。関数を実行してエラーになるのか、添付をつけようとしているのに付かずに送信されるのかなどどの段階で困って何を解決しないといけないかを明確に言語化してほしいです。attachments: []→attachments: attachmentFilesにしたらどうでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/21 12:16

papinianusさんの指摘ともかぶりますが、そもそも attachments: [] で空の配列をセットしていることにお気づきでしょうか?
pee.cyon.cyon

2018/06/22 02:20 編集

ご返答をありがとうございます。その後、関数は実行することができました。attachments:[attachmentFiles]と変えてみたのですが、添付をつけることができませんでした。
papinianus

2018/06/22 01:13

本当に申し訳ないのですが、コードを書いたなら本文に反映してください。ここはcodeブロックも改行も効かないからつらいです。あとattachmentfilesはそれ自身配列なのになぜさらに配列にラップするのでしょうか?attachments : attachmentFiles;でよいのでは?([]が不要では?)
pee.cyon.cyon

2018/06/22 02:10

ありがとうございます。attachmentFilesの[]をはずし、上記のコードに変更したのですが、ファイルの取得に問題があるように思われるのですが、添付がうまくいきません。ご教示願えないでしょうか。
pee.cyon.cyon

2018/06/26 03:13

ご回答ありがとうございます。別々の宛先に、氏名・本文を差し込み、同じフォルダーIDを一斉送信するコードはわかったのですが(上記ソースコードご参照)、別々のフォルダーIDを差し込み、個別に添付する方法が見つかりません。ご教示ねがえないでしょうか。
guest

回答2

0

質問が大部分かわっているので別回答を

宛先ごとに個別の添付ファイルをつける方法が見つかりません

編集する以前の質問からvar strfile=mySheet.getRange(i,7).getValue();というのがあるわけですから、

javascript

1var folder=DriveApp.getFolderById('--------------');

のところを

javascript

1var folder=DriveApp.getFolderById(strfile);

とすれば良いのではないかと思います。

※もちろんG列にfolderIDがあることを前提にしています。
フォルダ名を書き間違えない、同じフォルダ名は1つしかない、という仮定をおけば

javascript

1var folder=DriveApp.getFoldersByName(strfile).next();

とすることでG列にはフォルダ名を書くようにすることも可能かとは思います。

投稿2018/06/26 04:16

papinianus

総合スコア12705

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

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

pee.cyon.cyon

2018/06/26 05:35

アドバイスいただいたように var folder=DriveApp.getFolderById(strfile); と入れ替えたことで、無事に送信することができました。 本当に本当に、ありがとうございました。
guest

0

ベストアンサー

試したのですが、添付については、attachment:attachmentFilesで送信可能でした。
そもそも提示のソースで本当に送信できていますかね?(添付がないとして)。
何かエラーが出ているのではないでしょうか。

  • var arr = mySheet.getRange(2, 2, 4, 4).getValues();がおかしい
    こちら、mySheetのB2:E5を固定で取っていますが、名簿情報はrowSheetで取っていたのに、ここで急に固定にする意図が分かりません。別人が書いたのでしょうか?
    さらに、var strTo=arr[i][0].getValue().next();としていますが、arrのi番目の0番目はB列です。つまり、strKarihaizokusakiです。F列にstrToがあるのに、B列を取るというのは筋が通りません。また、この仕組みだと、strSekininshaやstrFuriganaの名前のファイルを取得することになりますが、あっていますか?
  • forがおかしい

添付がつかないのは主にこのせいです。
for(var i = 0, i= arr.length; i <1; i++)for(var i = 0; i <arr.length; i++)でないとおかしいはず。一度もループを回らないから添付がつかないのだと思われます。

  • strToがおかしい

arr[i][0].getValue().next()はエラーになるはずです。arr[i][0]は責任者の名前なので文字列。文字列にgetValueはないし、getValueをするとプリミティブになるはずだから、.nextはきかない。

  • GmailApp.sendEmailの引数がおかしい

strCCを置くことはできないはずですAPI仕様。attachmentがあるところにCC:strCCとしないとできないはず。なので、添付以前の問題として送信が成功するはずがないと思います。

本当に動作するコードを掲載してほしいです。
まとめると、for以下を↓のようにすれば添付と送信が可能となると推察します。

javascript

1 for(var i = 0; i < arr.length; i++){ 2 3// var strTo=arr[i][0]; //送付先メールアドレスを取得 4 5 //添付ファイル1~3を取得(空白ならスキップ) 6 if(arr[i][1] != ''){ 7 attachmentFiles.push(folders[0].getFilesByName(arr[i][1]).next()); 8 } 9 if(arr[i][2] != ''){ 10 attachmentFiles.push(folders[1].getFilesByName(arr[i][2]).next()); 11 } 12 if(arr[i][3] != ''){ 13 attachmentFiles.push(folders[2].getFilesByName(arr[i][3]).next()); 14 } 15 } 16 17 var strBody=strDoc 18 19GmailApp.sendEmail( 20strTo, 21//strCc, 22strSubject, 23strBody, 24 {attachments: attachmentFiles} 25 ); 26

投稿2018/06/22 15:47

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問