SESはハードリミットとして、1通のメールに含まれている宛先が50件までという制限があります。
また、Redmineは3.4.2現在ニュースの通知をする場合、すべてのメンバーをbccに入れて送信するという仕様になっています。そのため、50人以上がプロジェクトに含まれている場合、以下のようなエラーがRedmineのログに出力されニュースが配信されないという現象が起こってしまいます。これを回避するためにlocalhostにpostfixを挟んで送信する手順になります。
554 Transaction failed. Recipient count exceeds 50
ただし、Redmine 4.1.0(リリース予定未定(2017年1月現在))以降ではニュースでも1人1通となる予定のようなので、そうなればこの対応は必要なくなります。
Patch #26791: Send individual notification mails per mail recipient
前提条件:
- AWS上でSESをSMTPとして使うセットアップは終わっている
- 利用するSESのRegionはOregon
- SMTPサーバーを利用するためのIAMユーザーは作成済みでそのCredntial情報を把握している
- Redmineの環境はAWSのAmazon Linux上で構築済み
- OSコマンドを実行するユーザーはec2-user
- postfixの設定は必要最小限に抑える
- main.cfで設定可能なsmtp_destination_recipient_limitが宛先分割単位となるが、postfixのデフォルト値が50のため、設定をあえて記載はしない。
- postfixのログが大量に出力されるようになりますが、その対策はここでは触れない。
上記2点についてはUsing AWS SES as SMTP Server for Redmine notificationで説明していますので必要な方はご覧ください。
手順概要
- (OPTIONAL)sendmailを削除
- Postfixをインストール
- (OPTIONAL)mailxをインストール
- PostfixをPrimaryのMTAとして設定
- Postfixの設定
- Postfixのサービス開始
- (OPTIONAL)メール送信テスト
- Redmineの設定変更
- Redmineの再起動
- Redmineの管理画面からのテストメール送信
手順詳細
- (OPTIONAL)sendmailを削除
- Postfixをインストール
- (OPTIONAL)mailxをインストール
- PostfixをPrimaryのMTAとして設定
- Postfixの設定
- Postfixのサービス開始
- (OPTIONAL)メール送信テスト
- Redmineの設定変更
- Redmineの再起動
- Redmineの管理画面からのテストメール送信
sendmailを使っていない環境であればデフォルトでインストールされるsendmailを削除。
[ec2-user]$ sudo yum erase -y sendmail
[ec2-user]$ sudo yum install -y postfix
メールの送信をコマンドラインで確認する場合はインストール
[ec2-user]$ sudo yum install -y mailx
sendmailを削除した場合は必要なし。削除していない場合は実行する。
[ec2-user]$ sudo alternatives --config mta
[ec2-user]$ cd /etc/postfix
[ec2-user]$ sudo cp -p main.cf main.cf.org
[ec2-user]$ sudo vi main.cf
以下を追記
1 2 3 4 5 6 7 8 9 10 11 12 |
relayhost = email-smtp.us-west-2.amazonaws.com:587 smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password smtp_use_tls = yes smtp_tls_security_level = encrypt smtp_tls_note_starttls_offer = yes smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3 smtp_tls_mandatory_protocols=!SSLv2,!SSLv3 smtpd_tls_protocols=!SSLv2,!SSLv3 smtp_tls_protocols=!SSLv2,!SSLv3 |
[ec2-user]$ sudo vi sasl_password
1 |
email-smtp.us-west-2.amazonaws.com:587 SESのSMTPユーザーID:SESのSMTPユーザーパスワード |
[ec2-user]$ sudo postmap hash:sasl_password
[ec2-user]$ sudo chmod 600 sasl_password.db
[ec2-user]$ sudo rm sasl_password
[ec2-user]$ sudo /etc/init.d/postfix start
mailコマンドを使って検証をします。mailコマンドはmailxがインストールされていることが前提となりますので、上記コマンド(手順3)を実行して必要な場合はインストールしてください。
-rが送信元メールアドレスとなりますが、これにSESでVerifyされているドメインのメールアドレスを指定する必要があります。
[ec2-user]$ mail -r xxxx@kohachi.net tomoyuki@kohachi.net
Subject: This is a test message
this is a test
.
[ec2-user]$ cd redmineのホームDIR/config
[ec2-user]$ sudo cp -p configuration.yml configuration.yml.old
[ec2-user]$ sudo vi configuration.yml
1 2 3 4 5 6 7 |
default: email_delivery: delivery_method: :smtp smtp_settings: address: "localhost" port: 25 domain: "kohachi.net" |
Reference: Postfixからの送信を全てSES経由に変更する