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