CentOS上のアプリケーションから「管理者宛のメールが届かない」 - 例えばEC-CUBEで。
最近、情けないミスを連発中です。
EC-CUBEの受注管理者宛のメールが上手く送信されないんです。
よくよく調べてみたら、原因はサーバー設定に有ったというお話です。
ほんとに情けない。あんまりにも情けないミスなんで恥ずかしくて書きたくないんですが、日本中探したら1人ぐらいは同じことでテンパっている人もいるかもしれませんので、傷を舐め合う相手探しを目的にここに晒しておきます。
環境と症状
環境
今回の症状はEC-CUBEでなくても起こるんですけど、一応、気づいたキッカケがEC-CUBEなので、さらりと環境を書いておきます。
- VPS root権限あり
- CentOS 7
- EC-CUBE 3
- PHP 7.1
- メール送信は、sendmailを使用
- メールサーバーは別にレンタル
症状
- ショップ管理者のメールアドレスは、info@ほげほげ.com
- 受注メールが、ショップ管理者宛に届かない。
- サーバー管理者へは届いている。
原因と対処
原因
- サーバーのホストネームに、ショップのドメイン名(メールアドレスのドメイン名)を設定したため、サーバー内でアドレスが解決してしまい info メールボックスにメールが送信された。
- info メールボックスは、root に alias されているので、サーバー管理者へメールが転送された。
- 一方、サーバーの外のレンタルメールサーバーへはメールが送信されないため、ショップ管理者にメールが届かなかった。
対処
以下のいずれかで対処。
- nmtui コマンドで、システムのホスト名を変更する。
- /etc/aliases を編集して、info の転送先を、root から別のメールアドレスに変更する。
事の顛末
普通は、こんなことは発生しないんです。サーバー自体のホスト名に、公開ドメイン名と同じ名前をつけるとか、あんまりやらないですよね。
というわけで、過去に似たような経験をしたことがなかった為に、原因を探り当てるのにムダな時間をかなり使ってしまいました。
info, marketing, sales, support といったアドレスは、postfixの初期設定で、 postmaster に alias されてるんですよね。
この postmaster は、さらに root に転送されるようになっています。
/etc/aliases
# Basic system aliases -- these MUST be present. mailer-daemon: postmaster postmaster: root (中略) info postmaster marketing: postmaster sales: postmaster support: postmaster
今回のケースでは、サーバー自体のホスト名をメールのドメイン名と同じにしてしまっていたせいで、そのドメイン宛のメールの配信については、自分のサーバー内でアドレス解決しようとします。
そして、運の悪いことに、初期設定で info に対するエイリアスが設定されてたお陰で、エラーも発生せず、メールがちゃんと届けられちゃったというわけです。
さらに、間の悪いことに、アプリケーションをインストールしたサーバー管理者としては、テストメールがちゃんと自分のところに届いているものだから、正しくセットアップできたと勘違い。
ところが、肝心要のショップ管理者へはナシのつぶてという最悪の状態が発生したわけでございます。
まぁ、試験中にトラブルを発見できたので良かったのですけど、見切り発車してたらちょっと寒気がする事態になってたんだろうなぁ。
ほんと、こういう余計な初期設定、しないで欲しいです。