読者です 読者をやめる 読者になる 読者になる

aws EC2からメールが送信できない件

aws

awsのec2をcentos6で使用すると最初からpostfixが起動していた。
しかしphpからmail()でgmail宛にメールを送信しようとすると何故かメールが送信できない。
mailogを見ると【refused to talk to me: 554-mail.com (mxgmxus005) Nemesis ESMTP Service not available】的な感じのエラーが出てている。

しかし以下のmailコマンドでgmail宛に転送したメールはちゃんと届いている。

echo test|mail root

どちらもgmail宛なのに、php経由かコマンド経由かの違いだけで何故か送信されなくなってしまうらしい。さらにphp経由でもgmail宛ではなく例えば自社のco.jpアドレス宛だと問題無く送信することができた。

以下のサイトによるとどうやらスパム対策のため申請が必要?なのかも。
EC2からのメール送信には、解除申請とDNSの逆引きの登録申請が必要です。 | 田舎に住みたいエンジニアの日記
Amazon EC2 ~メールを送信するには~ | ec2 メール 送信 制限解除 | ナレコムAWSレシピ
はじめてのAWS、“つまずきポイント”はココだ! - [AWS運用ポイント2]最悪の場合アカウント停止も:ITpro
Amazon EC2 Eメール送信ベストプラクティス | Developers.IO

それかもしかするとgmail側の問題かも?後で調べること。

2017/1/7追記
今度は自社ドメインのco.jp宛でエラーになった。エラー内容を見ると「status=bounced」となっておりこれは配送NGの意味らしい。
EC2からのメール送信には、解除申請とDNSの逆引きの登録申請が必要です。 | 田舎に住みたいエンジニアの日記
とりあえずここから申請をしてみて様子見。

2017/1/14追記
申請してもエラーが変わらなかったからもう一回調べて、結局くっそはまってやっと解決した。
今回メール送信が出来ず出ていたらエラーは以下となる。

said: 553 5.1.8 <root@ip-xx-xx-xx-xx.ap-northeast-1.compute.internal>... Domain of sender address root@ip-xx-xx-xx-xx.ap-northeast-1.compute.internal does not exist (in reply to MAIL FROM command))

どうやらこれは【送信元のホスト名が存在しないよ】というエラーだったらしく送信元のホスト名が原因だったことになる。【aws メール送信 エラー】でググっても「申請しろ!」っていう記事しかヒットしないから気づくのに時間がかかってしまった(結局awsに申請して1週間経っても(1weekかかる場合もあると返答メールに書いてあったから愚直に1week待った俺はアホ)結果は変わらなかった)。ec2だと確かにhostname実行すると「ip-xx-xx-xx-xx.ap-northeast-1.compute.internal」が設定されているからそのままメール送信しちゃうと送信元もそのホスト名になってしまってエラーになる場合があったってわけ(gmail宛とかだとエラーにならなかったから余計に気づくのに時間がかかった)。なので送信元のドメイン名にElasticIPの逆引きドメインを設定したところ、無事送信できた。デフォルトの送信元を変更するにはpostfixの設定ファイルから可能。
/etc/postfix/main.cf

myhostname = example.jp
mydomain = example.jp
myorigin = $mydomain
append_at_myorigin = yes
append_dot_mydomain = yes

Postfixによるメール送信設定 – 稲葉サーバーデザイン
設定はこちらのページを参考

資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html