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

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

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

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

Q&A

1回答

4175閲覧

GASでのメール送信について

JunMiyata

総合スコア12

Google Apps Script

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

0グッド

0クリップ

投稿2019/06/10 16:19

前提・実現したいこと

シートに記載された情報を使ってEmailを送信する。
メールの送信者リストを作成し、指定範囲の上から順に且つ送信フラグがブランクでない場合に宛先ごとに異なったメッセージを挿入&ファイルを添付して送信をしようとしております。

###ここに質問の内容を詳しく書いてください。
シートに記載した情報を元に、ドライブから添付ファイルを貼り付けてメールを送信したいです。
シートには、以下のコラムが左から(A列から)順に入っています。
SEQ,会社名,担当者名,宛先,CC,メール内容,メールタイトル,メール本文,署名,添付ファイルのフォルダID,添付ファイル名,担当者,送信フラグ

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

エラーは出ませんが、メールが送られていないようです・・・。

該当のソースコード

/* スプレッドシートのシートを取得と準備 */
function myFunction(){
var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
var dataRange = mySheet.getRange(2,2,14,12).getLastRow(); //範囲の指定

/* 各値の割当 */
for (var i=0;i<=dataRange.length;i++) {
var strTo=mySheet.getRange(i,2).getValue(); //送信先emailアドレス
var strCC=mySheet.getRange(i,3).getValue();//CCアドレス
var strSubject=mySheet.getRange(i,5).getValue();//メールタイトル
var strBody=mySheet.getRange(i,0).getValue()
+"\n"
+mySheet.getRange(i,1).getValue()
+"\n"
+"\n"
+mySheet.getRange(i,6).getValue()
+"\n"
+mySheet.getRange(i,7).getValue();//メール本文
var folder = DriveApp.getFolderById(mySheet.getRange(i,8).getValue());
var strFile= folder.getFilesByName(mySheet.getRange(i,9).getValue()); //ファイルIDを取得
var attachments=[];
while(strFile.hasNext()){
attachments.push(files.next())
};

/* メール送信 */
if(!mySheet.getRange(i,11).getValue())

MailApp.sendEmail({
to:strTo,//宛先
cc:strCC,//CC
subject:strSubject,//件名
body:strBody,//本文
attachment:strFile//添付ファイルの挿入
});
};
}

試したこと

当方プログラミングに関しては素人のため、同様な事例を探して見よう見まねでコードを書いてみましたが、なかなかうまくいかずに手こずっております。
指定範囲の上から順に且つ送信フラグがブランクでない場合に送信するという風にしたいのですが、また、dataRangeの指定のところで、getLastRowをつかうと指定の最終行だけが抽出されてしまうようで、上から順に、という操作がうまくできません。
ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

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

guest

回答1

0

ここでエラーが出ると思う→var strBody=mySheet.getRange(i,0).getValue()
範囲は1から始まるので。

もしここをクリアしても、カラムの記載がシートと合致しているなら、8番目はメール本文なので、ここでエラーvar folder = DriveApp.getFolderById(mySheet.getRange(i,8).getValue())になるはず

それもクリアしたとして、if(!mySheet.getRange(i,11).getValue())のとこで11番目はフォルダidなので、空白値ではないのでifの中は実行されない

投稿2019/06/10 22:23

papinianus

総合スコア12705

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

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

papinianus

2019/06/10 22:24

エラーがでている、コードが最新でない、カラムが正しくない、のいずれかが真だと思う
JunMiyata

2019/06/11 04:47

/* スプレッドシートのシートを取得と準備 */ function myFunction(){ var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var dataRange = mySheet.getRange(2,2,15,12).getLastRow(); /* 各値の割当 */ for (var i=2;i<=dataRange;i++) { var sendValue =mySheet.getRange(i,13).getValue()//送信フラグの確認 if(mySheet.getRange(i,13).getValue()){ var strTo=mySheet.getRange(i,4).getValue(); //送信先emailアドレス var strCC=mySheet.getRange(i,5).getValue();//CCアドレス var strSubject=mySheet.getRange(i,7).getValue();//メールタイトル var strBody=mySheet.getRange(i,2).getValue() +"\n" +mySheet.getRange(i,3).getValue() +"\n" +"\n" +mySheet.getRange(i,8).getValue() +"\n" +mySheet.getRange(i,9).getValue();//メール本文 var id =mySheet.getRange(i,10).getValue() var folder = DriveApp.getFolderById(id); var strFile= folder.getFilesByName(mySheet.getRange(i,11).getValue()); //ファイルIDをK列から取得 var attachments=[]; while(strFile.hasNext()){ attachments.push(strFile.next()) };//ファイルの添付 /* メール送信 */ // MailApp.sendEmail({ to:strTo,//宛先 cc:strCC,//CC subject:strSubject,//件名 body:strBody,//本文 attachments:attachments//添付ファイルの挿入 }); }; }; }
JunMiyata

2019/06/11 04:47

データ範囲から見直し、上記のスクリプトで想定通りの動きをするものにできました!ありがとうございました
papinianus

2019/06/11 08:13

自己解決でもよいので、解決としてマークしてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問