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

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

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

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Q&A

2回答

9815閲覧

[GAS]GmailApp.sendEmailで100件単位のメールを送信すると重複して送ってしまう

H_Watanabe

総合スコア8

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

0グッド

2クリップ

投稿2016/03/22 06:55

編集2016/03/22 07:54

お世話になります。
現在、Spreadsheetの1列目にあるメールアドレスのリストをgetValuesで配列に格納し、
1行ずつGmailapp.sendEmailに入れて100件単位のメールを送信しています。

行数が10件程度の送信では1通ずつ送信するのですが、行数が100件を超えると同じ宛先にメールが2〜10件送信しています。同様の現象を体験した方や解決方法をご存知の方アドバイスいただけないでしょうか。

[code.gs]

google

1function myfunction(){ 2 var url = "https://~~"; 3 var ss = SpreadsheetApp.openByUrl(url); 4 var s = ss.getSheetByName("hoge"); 5 var address = s.getRange(1,1,s.getLastRow(),1).getValues(); 6 for(var i=0;i<address.length;++i){ 7 Sendmail(address[i][0]); 8 } 9} 10 11function Sendmail(add){ 12 var from = "hogehoge@gmail.com" 13 var name = "hogehogehoge" 14 var subject "fugafuga" 15 var body = "hogehoge¥nfugafuga¥n" 16 GmailApp.sendEmail(add,subject,body,{from:from, name:name}) 17} 18

[Spreadsheet]

hogefuga@gmail.com
...
...
...
...(100行以上)
fugafuga@gmail.com

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

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

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

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

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

kei344

2016/04/01 13:53

myfunction のトリガーは手動実行でしょうか。
H_Watanabe

2016/04/01 14:03

手動実行になります。
guest

回答2

0

はじめまして。
回答ではないのですが、1点確認させて頂いてよろしいでしょうか?

100件単位のメールを送信

ということですが、GASにおける1日あたりのメール受信者数の制限に引っかかっているかと思いますが、その点に関する下記のエラーは出ていませんか?

  • 送信できるメールの制限数に達しました
  • Gmail の送信制限に達しました
  • 受信者数の上限を超えています

引用:Google Apps のメールの送信に関する制限事項

ビジネスや教育アカウント等ではないことを前提としていますが、もしそうであるなら、原因がフロントかサーバーか切り分ける必要があります。

ひとまず以上となります。

【参考】

投稿2016/03/25 03:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

H_Watanabe

2016/03/25 04:45 編集

ご回答有り難うございます。 後出しになって申し訳ないのですが、アカウントは個人アカウントではないためメールの制限数に達しているわけではありません。よって、ご提示いただいたエラーは現状、発生していません。 また、ご提案いただいた件で、フロントとサーバで切り分けを行うとしたらどのような手法が考えられますでしょうか。素人で申し訳ありません。 現在、発生している現象としては下記です。 ・indexをつけてみたが、送信順序どおりに届かない。しかし送信時間は順序どおり。 ・同じ宛先へ複数のメールを送ってしまっている。 GmailAppの呼び出し頻度が高過ぎるのかと思い、SendEmailの後に2秒のsleepをかませてみたのですが、相変わらず現象が出てしまいます。 以上
退会済みユーザー

退会済みユーザー

2016/03/25 06:21

なるほど了解いたしました。 > ・indexをつけてみたが、送信順序どおりに届かない。しかし送信時間は順序どおり。 経由サーバーの環境にもよりますので、送信順に相手に到着するという保証はございませんので問題ないかと思います。 > ・同じ宛先へ複数のメールを送ってしまっている。 問題はここですよね。 Logger.logなどでSendmail前後のメールアドレスに変化がないか追いかけてみてはいかがでしょうか。 例) Logger.log('before:'+address[i][0]); Sendmail(address[i][0]); Logger.log('after:'+address[i][0]); 一定して同じ箇所でアドレスが差し替わっている、特定のアドレスだけ差し替わっている、など、何らかのデータは取れると思います。 その次の段階として、Sendmail内部のログ記録の解析となります。 上記、ログの内容が想定通りなら、一応はフロント側の問題は切り捨てることができるかと思います。 (もし、既に同様の解析を行っていましたら申し訳ございません) 簡単ですが以上です。
退会済みユーザー

退会済みユーザー

2016/03/25 06:24

失礼しました。 先ほどの例文が間違っておりました。 これでは前後の違いを確認できませんね。 以下、訂正いたします。 例) Logger.log('before:'+address[i][0]); Sendmail(address[i][0]); //Sendmail内 Logger.log('after:'+add);
H_Watanabe

2016/03/25 10:23

ご提案ありがとうございます。 試してみましたが、結局文字列に読み込んでいるだけなのでBefore/Afterで特にアドレスの中身は変わっていませんでした。 当然for文が回れば次のアドレスに変更されます。
H_Watanabe

2016/03/25 10:24

GmailApp.sendEmailで送った先がLogger.logで出力できればよいのですが。
退会済みユーザー

退会済みユーザー

2016/03/25 22:57

> 試してみましたが、結局文字列に読み込んでいるだけなのでBefore/Afterで特にアドレスの中身は変わっていませんでした。 まぁ、当然の結果でしょうけれど、ログからの情報として、それぞれ送信にかかった時間も参考になると思います。 どうも今のところ GmailApp.sendEmail の挙動が怪しいという事になりそうですので、 MailApp.sendMailでも同様の現象が起きるのか検証する必要がございますね。 あとは一括送信ではなく、いくつかのグループに分割して送信する、ということが考えられますね。 つまり、メールアドレスの差し替わりがGmailApp.sendEmailによるものなのか、件数によるものなのか、特定のアドレスに対してのみ行われるのか、といったことを検証するわけですね。
H_Watanabe

2016/04/04 02:11

GmailAppの挙動が怪しそうですね。 MailApp.getRemainingDailyQuotaで送信可能件数を確認してみたのですが、同一メールを複数回送っている場合でも、とある宛先に送信をする前後で送信可能件数の減少は1だけでした。 MailAppのバグなのかもしれません。
退会済みユーザー

退会済みユーザー

2016/04/04 03:36

> GmailAppの挙動が怪しそうですね。 > MailAppのバグなのかもしれません。 なるほど。 となると、当方にて参考情報を提供できるのはここまでとなります。 ここから先は内部処理の話になってきますので、Googleにポストしたほうが良いと思います。
guest

0

はじめまして。

プログラミングに関しては、まったくの初心者です。
投稿するのもはじめてです。

社内で必要に迫られ、
初めてGASでの、メール送信にトライしてみたところ、
こちらでの現象が同じことが発生しております。
(10件程度ならOK。50~100件だとアウト)

私の方は、
MailApp.sendMailで、発生しております

ラッキーなことに、送信先が関係個所関連で全てgmail利用のため、
受信先では、複数送信メールも同一のものと相手先gmail側で処理されているようで、
混乱は招いていないようなのですが・・・。

参考になる情報でもなく、便乗するような形で申し訳ありません。
その後、進展がございましたら、
教えていただければと思い、投稿いたしました。

投稿2016/07/27 14:16

編集2016/07/29 05:55
akasan

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問