メールサーバーにドメインは必要である

メールサーバーにドメインは必要である

2021年明けましておめでとうございます。キャレット合同会社の椎原です。

 年末にメールサーバーの設定ができないので設定して欲しいとの依頼が開発を委託しているパートナーから来ました。どういう事情か知りませんが、EC2インスタンス作ってそれで開発をしているようです。phpからメールを送りたいけど、できないとのこと。

簡単じゃん、と思ったらそうでもありませんでした。よく言われるようにメール設定は闇です。

 開発が言うには、別に設定しなくても今まで使えていたとか。
 えー? それはないでしょ。

ドメイン振ってないんですよ。後述する理由で、ローカルのメールアドレスならともかく、パブリックのアドレスへの送受信は無理です。

 まず、すでにメールサーバーがあって、それを利用することになっているとします。
メールサーバー側で、送信元のサーバー(ドメイン)を許可リストに入れなければいけません。
それで初めて送信できるようになります。これが一番簡単な方法。
※php.iniのSMTP に送信するメールサーバーのURLを記述します。

 今回はAWSなのでSESを使えば良さそうな気がしますが、これもドメインが必要だし、要望もないのでやってません。SSL証明書とかの設定が自動でされるので楽なんですけどね。

 EC2内にメールサーバーを立てる場合、まずメールサーバーが入っているか確認してください。デフォルトでは入ってないことがあるそうですし、今回はpostfixが入ってたとのことです。

 あと、セキュリティグループの25番と587番は開けておいてください。接続を確認するにはtelnetで接続してお話できていればOK(telnetはwindowsには標準で入ってないのでインストール要)

複数のMTAが入っている場合、以下のコマンドで切り替えます。

alternatives --config mta

今回はsendmailに慣れている人が弊社に居ましたのでその勧めでsendmailを入れました。

で、本論はここから。

DNSにドメイン登録しないとメールは普通に使えません。MXレコードは当然です。
まあ、EC2だと仮ドメインのec2-xxx-xxx-180-202.ap-northeast-1.compute.amazonaws.comとかに割り振ってくれるのでまだ良いです。※nslookupとかdigでみると分かります。

問題はSPFレコード。これ、送信ドメイン認証のためのレコードです。
SPF, DKIMの特徴と違い
インチキメールアドレスではないかと受信側が調べに行くんです。回答がなければブロック。届かないという事態になります。

また、DKIM署名というドメイン認証もあります。

メールの暗号化はSSL/TLSを使います。今回はオレオレ証明書を利用して暗号化してます。Let’sEncrypt証明書を使おうとしたけど、ec2-xxx-xxx-180-202.ap-northeast-1.compute.amazonaws.comのドメイン発行で拒否されて作成できませんでした。

送信だけで、この3つの認証で引っかかります。

では受信はどうでしょうか?

今回POP3、IMAPサーバーがない上、外部から送信すると「有効なメールアドレスではありません」というポップアップが出ました。これもおそらく、ドメインがないせいだと思われます。

ドメイン登録しないとどうしようもないというのが、結論です。

なお、送信メールがどこでこけているのか調べるときに、Becky!というメールソフトを使いました。送信ログを見ることができるので、これはSTARTTLS認証かなとか、ユーザー名ではねられてるとか知ることができ、対処できます。その分、設定が細かいので、試行錯誤するのですが……。Thunderbirdは自動設定で送受信可能なので、初心者向けです。※インストールしたらwindowsのファイアウォールに登録されてなかったので注意。

以上、意外に、ドメインが原因で送受信できないとか書いてるサイトがないので記録として残しておくことにしました。

お問い合わせ

記事の内容についてもっと詳しく知りたい方や キャレットへのお問い合わせ・資料請求はこちらからお気軽にご連絡ください。

Uncategorizedカテゴリの最新記事