Apex一括メール送信の制限

お久しぶりです、こころです。

Apexからの一括メール送信には

”1 組織あたり 1 日に合計 1,000 個の外部メールアドレスまで” 

つまり

”アドレス重複を含んで1日1000通まで”

というガバナ制限があります。

1日で閾値ギリギリまでメール配信されそうな要件があり、閾値を超えるとどうなるのか試してみました。

例えば1回に75通Apexからメールを送るとして、
13回送信すると975通になります。
14回目にどうなるのでしょうか?

①エラーになってメールは1通も配信されない
②25通まで配信され1000に達した後は配信されない
③なんと1000通超えて配信完了する

①であって欲しいと思いながらメールの一括送信用メソッドMassEmailMessageのレファレンスを確認すると、

sendEmail メソッドで送信される一括メールメッセージは、送信する組織の 1 日の一括メール制限にカウントされます。この制限値に達すると、MassEmailMessage を使用する sendEmail メソッドへのコールは拒否され、ユーザは MASS_MAIL_LIMIT_EXCEEDED エラーコードを受信します。

とあり、MASS_MAIL_LIMIT_EXCEEDEDの解釈が問題となりそうです。

DeveloperEdition(配信制限数は10通/日)でテストしてみました。

Apexクラス

public class sendMassEmail {
    public List contactIds = new List();

    public static void sendMass() {
    List conObj = [SELECT id, name FROM Contact LIMIT 3];//配信対象件数
    List contactIds = new List();
    for(Integer i=0; i < conObj.size(); i++){
        contactIds.add(conObj[i].Id);
    }
    Messaging.MassEmailMessage mail = new Messaging.MassEmailMessage();
    mail.setTargetObjectIds(contactIds);
    mail.setTemplateID('00X10000000NzIC'); //送信メールのテンプレートのID
    Messaging.sendEmail(new Messaging.MassEmailMessage[] {mail}); 
    }
}

ページ

<apex:page controller="sendMassEmail">
    <apex:form >
        <apex:commandButton action="{!sendMass}" value="一括送信"/>
    </apex:form>
</apex:page>

ボタンを1回押すと3通の一括送信メールが送られます。DeveloperEdition組織の一括メール送信制限は10通です。3回ボタン押下で9通配信されますが、4回目で何が起こるでしょう。

※一括メール送信はログインユーザで実行されます。

20140708_14439_2

3回クリックして4回目は、、

20140707_234827_2

キタ!! System.EmailException: SendEmail failed. First exception on row 0; first error: MASS_MAIL_LIMIT_EXCEEDED, Failed to send email: []

のエラーになりました。

デバッグログを確認すると

00:47:08.033 (33768787)|EXCEPTION_THROWN|[42]|System.EmailException: SendEmail failed. First exception on row 0; first error: MASS_MAIL_LIMIT_EXCEEDED, Failed to send email: []
00:47:08.034 (34189036)|SYSTEM_METHOD_EXIT|[42]|Messaging.sendEmail(LIST<Messaging.Email>)
00:47:08.034 (34251510)|FATAL_ERROR|System.EmailException: SendEmail failed. First exception on row 0; first error: MASS_MAIL_LIMIT_EXCEEDED, Failed to send email: []


4回目の一括配信メールは失敗して送信されませんでした。
(もちろん最初の9通は届きましたが、それ以降は1通も届いていません。)

設定>ログ>メールログファイル よりメールログをリクエストして確認すると、やはり9通です。

1

というわけで予想通り①でした。

実は検証を仕込んでいる間に、

SendEmailResult オブジェクトで返されるすべてのエラーは、メールが送信されなかったことを表します。

の文字をApexレファレンス中(P294)に見つけてしまって、検証するまでもなく①な気が限りなくしていたのですが、念のため確認してみました。

Sandboxで1000通の制限に対してのテストをしてみましたが、同様に一括メール件数が閾値を超えるリクエストの場合は配信はされません^^

Apexからの一括メール配信を設計する上で参考にしてみてください。

コメント(0)