状況
Webサーバーyukihirog.jp
に設置したPHPからsendmailを経由してmail@yukihirog.jp
にメール送信すると失敗してしまう。
しかし、mail@anotherdomain.com
など、他のドメインのメールアドレスへのメール送信は成功する。
そのため、サーバーと同じドメインへのメール送信のみが失敗していると考えられる。
また、/var/log/maillog
にUser unknown
が記録されていた。
(以降、yukihirog.jp
の部分は自分のドメインに読み替えてください)
原因
メール送信時、設置サーバーと同じドメインの場合は外部を経由せずに自サーバー内で解決されるらしい。
実際のメールサーバーをGメールなどで運用している場合、自サーバー内を探しても配信先が見つからずに失敗、あるいは見つかってもユーザーが利用しているアプリなどに届かないことになる。
sendmailの確認
sendmailが入っているかの確認
which sendmail
# /usr/sbin/sendmail などが出力される
sendmailが起動しているかの確認
service sendmail status
# 起動していれば情報がいろいろ表示される
# Active: active (running) などが書いてあれば起動中
対応
サーバーと同じドメインであっても外部を経由するように設定する。
以下のどちらの方法でも対応できた。
方法A:local-host-names
にドメインを追記する
sendmailの設定を編集
sudo vi /etc/mail/local-host-names
local-host-namesにドメインを追記
# local-host-names - include all aliases for your machine here.
yukihirog.jp
sendmailを再起動
sudo service sendmail restart
方法B:sendmail.mc
にドメインを追記する
sendmailの設定を編集
sudo vi /etc/mail/sendmail.mc
以下を追記して保存
define(`MAIL_HUB', `yukihirog.jp.')dnl
define(`LOCAL_RELAY', `yukihirog.jp.')dnl
sendmailを再起動
sudo service sendmail restart
その他の対応方法
サーバーによってはログインして管理画面から設定できるところもあるようだが、自分のサーバーとドメインの契約は該当しなかったので確認できなかった。