Exmentでメール送信の設定をする（Amazon SESがおすすめだよ）

[Exmentをインストール](https://exment.net/docs/#/ja/quickstart)したら、早めにやっておきたい設定があります。

それは、**メールの送信設定**。

Exmentには、レコードを追加したら通知をメールで飛ばす、というようなメール通知の仕組みがあります。ま、そのためにも必要ですが、そもそも**メールが送信できないと、パスワード忘れた時に、再発行メールを飛ばせない→詰む**ということになります。

ですので、できるだけ早めに設定しておいたほうが良いです。

## Exmentのメール送信設定箇所

デフォルトでは、左カラムのメニューから、「管理者設定→システム設定」で開いた画面の右上「システム設定」ボタンをクリックし、開いたモーダルの中にある「詳細設定」をクリックします。開いた画面の下のほうに、「システムメール設定」があります。

![2020-09-11_10h20_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/3c78a518-cce2-4116-a1a9-2aaa5eb560fd.png)
↓
![2020-09-11_10h21_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/0b3cdd3c-842b-0f98-7e06-d5c89b7ac7c6.png)
↓
![2020-09-11_10h21_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/e30e4f77-a852-ae35-879c-4705f531ced6.png)

インストール直後のデフォルトでは、smtp.mailtrap.ioというSMTPサーバーが設定されていると思います。

[mailtrap.io](https://mailtrap.io/)は、開発用のメール送信サービスなので、本番運用では使えないと思います（試してませんが。）

そこで、然るべきメール送信サービスを設定します。

## レンタルサーバーで運用している場合、そのレンタルサーバーのメール送信サーバーで良い？

[Exmentのウリのひとつとして、さくらインターネットやエックスサーバーといった一般的なレンタルサーバーでも運用](https://exment.net/docs/#/ja/install_rental)できる、というのがあります。

一応、Exmentの公式から、各レンタルサーバーのメールサーバーでの設定ページへのリンクも張られています。

が、一度ここで考えてみましょう。

仮に**100人のユーザーがExmentに登録されていて、ある時、5分間に誰かが合計3回レコードを修正したら、通知のメールは一体5分間に何通飛ぶのか？**　簡単な算数の問題ですよね。**300通**です。

一方、レンタルサーバーのメール送信サーバーは、どこまで送信数を許容してくれるのでしょうか？

[さくらインターネット公式](https://help.sakura.ad.jp/206053142/#ac03)によると、

>3.3. メール送信件数の上限
>
| ライト スタンダード プレミアム                                                         | ビジネス ビジネスプロ                                                                     | マネージドサーバ                                                                          |
|----------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| 15分毎に約100通程度  (400通/時間 9,600通/日 換算、ただし15分に100通程度を超えない範囲) | 15分毎に約250通程度  (1,000通/時間 24,000通/日 換算、ただし15分に250通程度を超えない範囲) | 15分毎に約600通程度  (2,400通/時間 57,600通/日 換算、ただし15分に600通程度を超えない範囲) |

また、[エックスサーバー公式](https://www.xserver.ne.jp/manual/man_mail_spec.php)では、このようになっています。

>メール送信数の目安
1,500通/時間
15,000通/日

エックスサーバーはまだ余裕がありますが、結局は

- どれくらいの数のユーザーが
- どれくらいの頻度でレコードを更新するか（あるいはその他のタイミングでメールを送信するイベントが発生するか）

によって、この送信制限数を超えてしまう可能性は否定できません…

## そこで、Amazon SESですよ

Amazon SESって何？ って方向けに、[公式](https://aws.amazon.com/jp/ses/)から引用しておきます。

>ユースケース
取引 E メール
購入の確認やパスワードのリセットなどのトリガーベースの連絡事項を、お客様のアプリケーションから顧客に即時に送信します。
マーケティング E メール
カスタマイズされたコンテンツと E メールテンプレートを使用して、特別オファーやニュースレターなどの製品やサービスを宣伝します。
Eメールの一括送信
通知やアナウンスを含む一括での連絡を大規模なコミュニティに送信し、設定セットを使用して結果を追跡します。

まさに、ExmentのようなWebシステムからの大量メール通知に使ってくださいね、ってことですね。

気になる[料金](https://aws.amazon.com/jp/ses/pricing/)ですが、

>| お客様の利用状況                                                        | お客様の支払い額                                                                           | 追加料金                                                                                           |
|-------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| Amazon EC2 でホストされているアプリケーションからの E メール送信        | 毎月送信する E メールのうち最初の 62,000 通につき 0 USD、それ以降 1,000 通ごとに 0.10USD。 | 添付ファイル 1 GB につき 0.12USD。EC2 を使用する場合は追加の料金。                                 |
| E メールクライアントやその他のソフトウェアパッケージからの E メール送信 | 送信する各 1,000 通の E メールにつき、0.10USD。                                            | 添付ファイル 1 GB につき 0.12USD。                                                                 |
| E メール受信                                                            | 受信する最初の 1,000 通の E メールにつき 0 USD、それ以降 1,000 通ごとに 0.10USD。          | 受信する E メールチャンク 1,000 通につき、0.09USD (詳細については、料金の詳細を参照してください)。 |

レンタルサーバー＋SESだと、2行目の価格設定に相当するので、1000通ごとに0.1ドル、つまり10円ぐらいです。

100名のユーザーだと10回分になりますが、仮に月1,000回ぐらいメールを100通飛ばすことになるのであっても、月に1,000円の費用負担です。まあまあ安いんじゃないでしょうか。

もし可能であれば、Amazon EC2またはLightsailからの運用だと、1行目の価格設定に相当するので、62,000通は無料になります。これは大きいですね。（LightsailからもSESの無料枠を使えるというのは、[非公式ですがこちらがソース](https://twitter.com/CanPayment/status/1210931658183999488)です。）

（[LightsailでExmentを運用したい方は、こちらの記事](https://qiita.com/kohki-shikata/items/5f274d3f842c07e26282)もご参照ください。）

あと、SESでない選択肢としては[SendGrid](https://sendgrid.kke.co.jp/plan/)になってくるかと思いますが、こちらも無料で月12,000通までは無料だそうです。（私は使ったことがないので、使用感などについてはなんとも言えませんが…）

## ExmentでAmazon SESを使う方法

基本的には、

1. SESのセットアップ
2. Exmentに設定

で完了します。

SESのセットアップはちょっと手間で、不正なメール送信を行わせないようにするため、審査があります。この審査をクリアして、晴れて正式に大量のメール送信ができます。(審査通過前は大量送信ができません)

詳しくは下記記事が詳しいので参考にしてください。

- [社内通知用SMTPにAmazon SESを使ってみた](https://note.com/w_yoshida/n/nbd86a7ec368e)

以降は、送信制限緩和が終わった前提で、Exmentへの設定方法を記します。

### SESのSMTP情報を確認する

Amazon SESのコンソールにログインし、左メニューから「SMTP Settings」をクリックします。

![2020-09-11_11h05_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/8c3837cd-8000-5385-10e8-7cc61a6bec17.png)
下図の画面が開くので、

- ServerName:
- Port:
- Use Transport Layer Security

をメモっておきましょう。
![2020-09-11_11h06_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/2cac2b8f-4fec-dddb-f03e-87f12b533377.png)

次に、「Create My SMTP Credentials」をクリックします。

![2020-09-11_11h09_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/aa30cd19-8ba2-ff0c-7e09-dce1a5873506.png)


IAMユーザーの作成画面になります。適当なユーザー名をつけましょう。ここでは、ses-exment-smtp-userとしました。

右下の「作成」ボタンを押して次に進みます。

![2020-09-11_11h11_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/b4c79bf9-a8d3-a2b3-d2e2-a0133c6c5b5c.png)

すると、SMTPユーザーアカウントが発行されるので、ユーザー名とパスワードを控えておきます。右下の「認証情報のダウンロード」でもOKです。

次に、Exment側に取得した情報を設定します。

先ほどのメール設定画面を開き、以下の内容で設定します。

| 設定項目       | 設定内容                              |
|----------------|---------------------------------------|
| ホスト         | SESコンソールで控えた内容をペースト   |
| ポート         | 25,465または587                       |
| 暗号化形式     | tls                                   |
| ユーザー名     | 作成して控えたユーザー名              |
| パスワード     | 作成して控えたパスワード              |
| 送信元アドレス | 管理者のメールアドレスか、no-reply＠~ |

以上の設定を済ませたら、保存ボタンを押して確定しましょう。

## Exmentからテストメールを送信してみよう

Exmentには、きちんとメールが送信されるかテストメールを送信する機能があります。

メール送信設定画面と同じ画面の最下部にあります。

![2020-09-11_11h20_43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/c226c38d-1201-8470-739a-f8f07894bffe.png)

ここに自分のメールアドレスを入力して、きちんと届くかテストしてみましょう。

![2020-09-11_11h22_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116223/c06d23bd-b3f9-57bc-b041-21696adeeca2.png)

お、きちんと届いておりますな。Gmailの重要フラグもついて、迷惑メール扱いにもなってません。

## まとめ
1. Exmentでは、インストール後なるはやでメール送信の設定をしておこう
2. そうしないとパスワード再発行時に詰む
3. レンタルサーバーのメール送信サーバーでは、ユーザー数や送信タイミングによっては送信数上限に達する場合がある
4. そういう場合は、Amazon SESやSendGridの利用がおすすめ
5. Amazon SES利用には審査がある

こんなところですかね。これでExmentでもそこそこ人数のいる会社でも通知メールばんばん飛ばせるようになりますね！