SESはAWSのサービスの一つでEメールを送ることができます。
AWS公式ドキュメントの記載でこのクォータを瞬間的に超えることはできますが、制限を超えた状態が長時間続くことは許可されません。と記載があります。許可されなくなった状態になった場合、SESを使用したメール送信がエラーになるのか一定時間待ってから再送されるのかがわからなかったので動作確認してみました。
結論 クォータを超過してから制限がかかるまでタイムラグがある
APIを呼び出した時点で送信エラーとなります。一定時間待って再送されるということはありませんでした。
クォータ(制限)を超過してから実際に制限されるまでタイムラグがありました。
筆者は制限200件に対して362件のメールを送って数分後に送信できなくなりました。
クォータとは AWSサービスの上限である
クォータとは上限です。SESには代表的なものとして一日あたりのメールの送信上限と、一秒あたりのメールの送信数のクォータが存在します。
ほかにもメールサイズなどのクォータは存在しますが今回は触れません。
サンドボックスでのSESのクォータ
AWSのアカウント発行をした直後はサンドボックスとなっており、その時の制限値は以下です。サンドボックス状態だとAWSにあらかじめ登録しておいたメールアドレスにしかメールを送れないなど、制約がつくのでSESを本格的に利用する際は解除しておきましょう。
サンドボックス解除後のSESのクォータ
サンドボックスを解除すると以下のように制限値が緩和されてSESに登録していないメールアドレス宛にも送信できるようになります。
SESでクォータを超過した際の動作
AWSのナレッジセンターの記事を参照していたら答えがありました。下記のようなエラーになり送信できないようです。
1秒当たりの送信レート超過時
Maximum sending rate exceeded
1日当たりの送信数超過時
Daily sending quota exceeded
動作確認 実際にクォータを超過してみる
メールを送信するソースコード
以下のようなコードでメール送信が行えます。
import boto3
client = boto3.client('ses', region_name='ap-northeast-1')
response = client.send_email(Source='test@gmail.com',
Destination={
'ToAddresses': [
'test@gmail.com',
]
},
Message={
'Subject': {
'Data': 'hello',
},
'Body': {
'Text': {
'Data': 'hello',
}
}
}
)
実行結果 日次送信数超過のエラー
ローカル環境から実行してみました。するとこのようなエラーが出ました。公式ドキュメントの通りのエラーが発生しました。
botocore.exceptions.ClientError: An error occurred (Throttling) when calling the SendEmail operation (reached max retries: 4): Daily message quota exceeded.
ただ、集計のタイミングと制限のタイミングで少しラグがあるらしく200の上限に達した瞬間に制限されるというわけではありませんでした。しばらくは超過しても送信できていました。
筆者の場合、クォータを超過して10分程度は通常通りメールを送信できていました。
これが「このクォータを瞬間的に超えることはできますが、制限を超えた状態が長時間続くことは許可されません。」の意味なのかもしれません。
一時的にクォータを超過した結果、使用した送信クォータが100%を超過しました。
1秒当たりの上限はローカル環境が貧弱だったため超えることができませんでした。ハイスペックマシンでコマンドプロンプト複数起動すると超えられるかと思います。
PR
当ブログはWordPressテーマSWELLを使用しています。非常に使いやすく、簡単にプロのようなデザインを使えるのでお勧めです!!
SWELL – シンプル美と機能性両立を両立させた、圧巻のWordPressテーマ
システムエンジニア
AWSを中心としたクラウド案件に携わっています。
IoTシステムのバックエンド開発、Datadogを用いた監視開発など経験があります。
IT資格マニアでいろいろ取得しています。
AWS認定:SAP, DOP, SAA, DVA, SOA, CLF
Azure認定:AZ-104, AZ-300
ITIL Foundation
Oracle Master Bronze (DBA)
Oracle Master Silver (SQL)
Oracle Java Silver SE
■略歴
理系の大学院を卒業
IT企業に就職
AWSのシステム導入のプロジェクトを担当