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

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

ただいまの
回答率

90.61%

  • Google Apps Script

    790questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 257

 前提・実現したいこと

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

初心者です。
複数の人に、それぞれ別々の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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2018/06/22 10:13

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

    キャンセル

  • pee.cyon.cyon

    2018/06/22 11:10

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

    キャンセル

  • pee.cyon.cyon

    2018/06/26 12:13

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

    キャンセル

回答 2

checkベストアンサー

+1

試したのですが、添付については、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以下を↓のようにすれば添付と送信が可能となると推察します。

    for(var i = 0; i < arr.length; i++){

//       var strTo=arr[i][0]; //送付先メールアドレスを取得

     //添付ファイル1~3を取得(空白ならスキップ) 
        if(arr[i][1] != ''){
            attachmentFiles.push(folders[0].getFilesByName(arr[i][1]).next());
        }
        if(arr[i][2] != ''){
            attachmentFiles.push(folders[1].getFilesByName(arr[i][2]).next());
        }
        if(arr[i][3] != ''){
            attachmentFiles.push(folders[2].getFilesByName(arr[i][3]).next());
        }
     }

    var strBody=strDoc

GmailApp.sendEmail(
strTo,
//strCc,
strSubject,
strBody,
 {attachments: attachmentFiles}
      );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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

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

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


のところを

var folder=DriveApp.getFolderById(strfile);


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

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

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/26 14:35

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

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    790questions

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