すぐ忘れるのでメモ。
Salesforceのメールに関連する制限です。
(2014/07/09追記)
こんなの見つけた。
https://na7.salesforce.com/help/pdfs/en/salesforce_app_limits_cheatsheet.pdf
これのEmail Limitsという項はガバナ制限のリファレンスのところに書いてる情報とほぼ同じだけど、見やすい。
(追記ここまで)
ガバナ制限
(2017/12/18 追記)
すごい久々に見返したら、送信数の上限はライセンス数によらず 5,000 通が上限だった。
API または Apex を使用して、グリニッジ標準時 (GMT) に基づき 1 日に最大 5,000 個の外部メールアドレスに単一メールを送信できます。
受信メールと送信メールで分けて書かれていた。この記事を書いたときから変わったのか、元から見間違えてたのか...
(追記ここまで)
内容 | 上限 | |
---|---|---|
1 | 1回のトランザクションで sendEmailメソッドを実行できる回数 |
10回 |
2 | 1日あたりにAPIやApexを使って送信できるメール数(※1) | 外部メールアドレス1000件分 |
3 | 1日あたりに送信可能なメール数 | 組織のSalesforceライセンス数 × 1000 |
4 | 1回のSingleEmailMessage メソッドに含めることのできるアドレス数(※2) |
100個 |
※1
Using the API or Apex, you can send single emails to a maximum of 1,000 external email addresses per day based on Greenwich Mean Time (GMT).
1,000 external email addresses なので「1000 通」ではなく「外部のメールアドレス1000 件分」が正しいんだと思う。
つまり、1通のメールアドレスの To と Cc にいずれも外部の人を指定した場合、2 件分とカウントされる。
また、あくまでApexなどから実行した場合の制限なので、Salesforce上のメール送信ボタンとかで送信している分にはこの1000通までというリミットは気にしなくてよい。
Single emails sent using the Salesforce application don't count toward this limit. There’s no limit on sending individual emails to contacts, leads, person accounts, and users in your organization directly from account, contact, lead, opportunity, case, campaign, or custom object pages.
※2
You can send 100 emails per SingleEmailMessage
Messaging.SingleEmailMessageとMessaging.MassEmailMessageの違い
Messaging.MassEmailMessage
は名前の通り、大量にメールを送信するためのクラス(のよう)なんだけど
調べた限り、使えるメソッドがかなり限定されているので
テンプレートで作成したメールをリードや取引先責任者宛に一括送信したい場合以外は使えなさそう。
以下、具体的な特徴。
setTargetObjectIds(List<ID>)
(複数形!)メソッドにより送信先を指定する。
つまり、setToAddressesにより直接メアドをセットすることはできないsetSubject
とかsetPlainTextBody
とかも使えない。
setTemplateIds
でメールテンプレートを指定するだけ
Apex内でメール送信の上限を確認する方法
Messaging.reserveSingleEmailCapacity(Integer)
メソッドを使うらしい。
引数に渡した数の分だけメール送信が可能ならば特に何も起きないが、上限を超えていた場合は以下のエラーが発生する。
System.HandledException: The daily limit for the org would be exceeded by this request
try { Messaging.reserveSingleEmailCapacity(emailsLeads.size()); } catch (Exception e) { System.debug('You have used up your daily allowance of mails'); }
setTargetObjectId
とガバナ制限の関係
If you use SingleEmailMessage to email your organization’s internal users, specifying the user’s ID in setTargetObjectId means the email doesn’t count toward the daily limit. However, specifying internal users’ email addresseses in setToAddresses means the email does count toward the limit.
組織内のユーザに向けてメール送信するなら使ったほうがいいよ!その場合はガバナ制限にカウントされないからね。
ということらしい。
※※2014/07/18追記※※
送信回数にカウントされる条件については、以下の記事が詳しい。
http://help.salesforce.com/apex/HTViewSolution?id=000176908&language=ja
おそらく、上に書いたように
setTargetObjectId
を使い、かつIdが組織内ユーザの場合はカウントされないsetCcAddressses
とかでToとは別のアドレスを指定した場合はその分カウント
(例では、setToAddressesとsetCcAddressesで違うアドレスを指定した場合は2回分でカウントされるとのこと)
さらにちょっとした補足
The single and mass email limits don't take unique addresses into account. For example, if you have
johndoe@example.com
in your email 10 times, that counts as 10 against the limit.
同じアドレスに繰り返しメール送信した場合、送信した分だけカウントされるよ!
という意味でいいかな。
リファレンス
- ガバナ制限(English)
- ガバナ制限(日本語)
- SingleEmailMessage Class Salesforce Developers * Salesforce Developers
- http://www.sundoginteractive.com/sunblog/posts/five-points-to-remember-when-sending-emails-with-salesforce