Google App Script(GAS)を使ってメール送信をするときに、「Exception: 上限を超えています: メッセージあたりの受信者数」というエラーが発生してメールを送信できない、あるいはドラフトを作成することができないことがあります。
ここではその原因と対処法についてまとめています。
エラーの内容
このエラーは「GmailApp.createDraft」でドラフトを作成したり、「MailApp.sendEmail」でメールを送信するときに発生するエラーです。
表示されるエラーメッセージは以下になります。
エラーの原因
エラーの原因は作成あるいは送信しようとしているメールの受信者数が50人を超えていることです。
これは、無料版・有料版(Google Workspace)に関わらず適用されます。
(参考)Google Workspace: Google サービスの割り当て
例えば、以下のようなGmailApp.createDraftがあるとします。
let recipients = "aaa@gmail.com,bbb@gmail.com,ccc@gmail.com,,,,,,,"
//Gmail下書きの作成
GmailApp.createDraft( test@gmail.com, subject, body, {
name: "送信者名",
replyTo: test@gmail.com,
bcc: recipients,
})
このとき、bccの宛先で指定している「recipients」は「aaa@gmail.com,bbb@gmail.com,,,,,,」のような文字列で指定しています。
ここの宛先が50人(正確にはToの宛先も含まれるので49人)を超えると「Exception: 上限を超えています: メッセージあたりの受信者数」というエラーが表示されます。
エラー対処法
このエラーに対処するには、宛先が50人を超える場合にメールを分割することです。
recipientsの宛先数が多すぎてエラーが発生するコードを以下とします。
let recipients = "aaa@gmail.com,bbb@gmail.com,ccc@gmail.com,,,,,,,"
//Gmail下書きの作成
GmailApp.createDraft( test@gmail.com, subject, body, {
name: "送信者名",
replyTo: test@gmail.com,
bcc: recipients,
})
例えば、これを以下の用書き換えます。
※50人ピッタリで区切るとToの宛先数が増減したときにエラーが発生してしまうので、ここではBcc40人毎に区切ります。
let recipients = "aaa@gmail.com,bbb@gmail.com,ccc@gmail.com,,,,,,,"
let recipientsArr = recipients.split(",");
let repeatNum = Math.ceil(recipientsArr.length/40);
let i = 0;
while( i < repeatNum ){
//Gmail下書きの作成
GmailApp.createDraft( test@gmail.com, subject, body, {
name: "送信者名",
replyTo: test@gmail.com,
bcc: recipientsArr.slice(40*i, 40*(i+1)).join(","),
})
//console.log("下書きを作成しました:", i);
//console.log("PerRecipients:", recipientsArr.slice(40*i, 40*(i+1)).join(","));
i += 1;
}
こうすることで、宛先40人毎に区切ってドラフトの作成をしてくれます。
もちろん、「GmailApp.createDraft」を「MailApp.sendEmail」に変更すればメール送信をしてくれます。