質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    20348questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CentOS

    2708questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

postfix+PHPMailerにおいて、特定環境にのみメールが送れない(不着になる)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 965

saken649

score 52

前提・実現したいこと

何卒お力添えをお願い致します。

コーポレートサイトのリニューアルにあたり、新たにメールフォームを設置し、お問い合わせが出来るようにしたいです。
PHP7.1、PHPMailerによるメールフォームです。
現状、特定環境かつFromとToが特定のアドレスの時のみ、メールが不着という事態が起きています。

PHPMailerでは、GMailなどによる既存メールサーバーのSMTPを介さず、自サーバーのpostfixを用いた送信となります。
(送信元、送信先ともにお客様のメールアドレスとなり、メール情報の開示を拒否されたためこのような設定となっています)

前提として、
・別の業者によってサーバーは既にVPSによって運営済み、私の会社にてコーポレートをリニューアル
・以前のコーポレートにはメールフォームが存在せず(メーラーが立ち上がっていた)
・使用するメールアドレスも既に本番運用済みで、アカウントに関する一切の情報開示は拒否されてます
・そのため、到着or不着の確認は1日1回のメール(メールフォームにて使用するアドレスとは別)でのやり取りのみ
・迷惑メールに入っているかどうかも、お客様の自己申告頼み
・メールフィルターの設定から、SMTPなどの設定まで一切不明、分かっているのはそのメールアドレスはGoogleのビジネスアカウントらしいことのみ

なお、お客様メールアドレスが hoge@fuga.co.jp だったとして、ドメイン fuga.co.jp はコーポレートが乗っているサーバーに紐付いています。

ネットワークやサーバー関連の知見は正直浅く、しかしながら社内にこの辺りのことが分かる人員がおらず、途方に暮れております。。
検証までは問題無かったにも関わらず、本番で急に浮上した問題のため、お客様側からも微妙な反応が返ってきておりどうしたらいいものかと。
疑わしき点、チェックするべき点だけでも構わないので、識者の皆様のお力添えを、何卒よろしくお願い致します。

質問したいこと要約

・PHPMailerにてSMTPを使わない設定にしている場合、Fromのメールアドレスはヘッダーを付けているだけで、それがどこのサーバーであるかは関係ない、という認識で合っているか
・From(もしくはTo)のメールアドレス次第で、/var/spool/mail/root が動いたり動かなかったりすることはあるのか
下記問題点に対して、チェックするべき点があるか

発生している問題・エラーメッセージ

本番サーバー かつ、FromとToが共にお客様アドレスの時 だけ メールが不着となります。
同時に送信される確認メールはFrom=お客様、To=私となるのですが、こちらは到着 します。
From=To=お客様の時だけ不着となります。この不着現象は検証環境では発生しませんでした。

現状のメール成功成否は下記のようになっています。

 本番環境  From=私 From=お客様
To=私
To=お客様 X
 検証環境  From=私 From=お客様
To=私
To=お客様

※私=開発時のテストメール(普通のGoogle)
※お客様=本番にて使用する、お客様のメールアドレス(Googleビジネスらしい)

なお、From=お客様の際のみ、/var/spool/mail/root に送ったメールと思しきものが追加されていきます。
From=私の際は、tailしていてもここに動きがありません。
また検証用のサーバーにおいてもここに動きは無く、またメールの送信は問題無く、お客様にも到着しています。

試したこと

・もしかしてGoogleがメールサーバーではなく、自サーバーがメールサーバーになってる?と思い、postfixの設定ファイル /etc/postfix/main.cf を確認する
→特段何も設定されておらず

補足情報(言語/FW/ツール等のバージョンなど)

OS: CentOS6
PHP7 + PHPMailer

本番環境と検証環境の違い

・本番環境は元より運用されていた環境となり、私の会社が関与したものではありません。
・検証環境は本番環境と同じCentOS6、PHP7をDockerにて用意したものです。
検証環境ではDockerにて構築した関係上、postfixを改めてインストールしております(CentOSのコンテナ上にpostfixが入っていないため)

PHPMailerの設定内容

SMTPが使えないので、設定はこれだけです。

$this->Mail = new PHPMailer();
~~~
$this->Mail->Encoding = 'base64';
$this->Mail->CharSet = 'UTF-8';
$this->Mail->isHTML(true);


件名などの設定は下記のようになっています
定数どちらも、お客様メールアドレスを指定しています
※メール送信画面がいくつかあり、そのためにクラスが変数に入っています

$this->Mail->setFrom($class::ADDRESS_FROM, $class::NAME_FROM); // From
$this->Mail->addAddress($class::ADDRESS_TO, $class::NAME_TO); // TO

postfixログ

指摘されてpostfixのログの存在を知りました。。

送信成功しているFrom=お客様、To=私のパターン

Mar 31 15:10:00 xxxxxxxx postfix/qmgr[1235]: 9FB60C0C09: from=<私のアドレス@gmail.com>, size=1990, nrcpt=1 (queue active)
Mar 31 15:10:00 xxxxxxxx postfix/smtp[6172]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c00::1b]:25: Network is unreachable
Mar 31 15:10:00 xxxxxxxx postfix/smtp[6173]: connect to gmail-smtp-in.l.google.com[2404:6800:4008:c07::1b]:25: Network is unreachable
Mar 31 15:10:01 xxxxxxxx postfix/smtp[6172]: 98250C0C0B: to=<私のアドレス@gmail.com>, relay=gmail-smtp-in.l.google.com[108.177.97.26]:25, delay=0.92, delays=0.05/0.01/0.45/0.41, dsn=2.0.0, status=sent (250 2.0.0 OK 1490940601 y2si4135767pli.71 - gsmtp)

不着のFrom=To=お客様のパターンと思しきログ

Mar 31 15:35:09 xxxxxxxx postfix/qmgr[1235]: 25236C0C04: from=<root@お客様ドメイン>, size=391, nrcpt=1 (queue active)
Mar 31 15:35:09 xxxxxxxx postfix/local[6232]: 25236C0C04: to=<root@お客様ドメイン>, orig_to=<info@お客様ドメイン>, relay=local, delay=82, delays=82/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)

※FromもToも、info@お客様ドメイン で設定していたはずなのですが。。

httpdのログ→怪しきログなし
PHPMailerのログ→そもそも存在せず
どのログにもこれ以上怪しそうなログは残っていないようでした。。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kongou-ae

    2017/03/31 21:51

    本番環境と検証環境の違いはなんでしょうか。

    キャンセル

  • ikedas

    2017/03/31 22:01 編集

    質問を読んでも正直何を言っているのかよくわかりませんので、次のものを示して下さい。▶︎PHPMailerの設定内容、▶︎メール送信時のログ出力 (PHPMailerのとPostfixの)、▶︎その他エラーメッセージが何か表示されていればそのメッセージ。なお、これらの情報の中のIPアドレスやドメイン名は、区別がつく形でマスクしていただいて構いません。

    キャンセル

  • saken649

    2017/03/31 22:51

    kougou-ae様 違いについて説明が足りませんでした。申し訳ありません。 追記致しました。 ikedas様 申し訳ありません。正直かなりやられており、藁にもという状態でして。。 分かる情報は追記致しました。

    キャンセル

回答 1

checkベストアンサー

+3

PHP の稼動しているWebサーバと お客様のメールサーバは、別に稼動しているということでよろしいでしょうか?

おそらく、PHP が稼動しているサーバで稼動している postfix の設定ファイル main.cf で、mydestination に お客様ドメインが、設定されているので、(PHPが動いている)Webサーバが、お客様ドメイン宛にメールを送信した際に 自分自身(WebサーバのPostfix)で受信していて、(お客様ドメインで使われている)外部のメールサーバまで、配送されていないのでしょう。

main.conf の内容が分からないので、推測になりますが、Webサーバにホスト名を設定して、mydestination からドメインを削除して、代わりに mydestination に Webサーバのホスト名を設定したら、ドメイン宛のメールが、外部に配送されるようにならないでしょうか?


コメントに対する追記

メールの送受信のログは、送信したサーバの /var/log/maillog にも残っていますので、ある程度は、確認できます。 (相手のサーバに配信できたかどうかまでしか記録されないですが...)

maillog ファイルを受信メールアドレスで検索してみると 以下のような行があると思います。これを例に説明します。 (以下は、gmail 宛に送った例です。)

Apr  3 19:39:22 localhost postfix/smtp[32676]: 4E00B350092A: to=<user1@example.com>, relay=gmail-smtp-in.l.google.com[74.125.204.27]:25, delay=2.1, delays=0.11/0.05/0.8/1.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1491215962 o5si13938393plh.68 - gsmtp)

まず、テストメールを送った時刻のログをさがして、見つかったら status (結果) をみます。

この例では、status が、「sent (250 2.0.0 OK 1491215962 o5si13938393plh.68 - gsmtp)」となっていますので、gmail-smtp-in.l.google.com 宛の送信に成功しています。
status 欄に sent や 250 OK の記載があれば、相手のサーバに配信できたと考えて大丈夫と思います。

なお、送信成功していても、受信側のメールボックスにない場合は、メールアドレスの確認や送信したメールが、相手先で迷惑メールと判断されていたりしないか確認してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/03 19:32

    CHERRY様

    ご回答有難うございます。
    ご教授頂いたファイルを確認したところ、確かに仰る通りの状況となっておりました。
    検証環境に、逆にお客様ドメイン名をホストにして、mydestinationがそのドメインになるように設定してみたところ、見事に状況を再現出来ました。

    お客様環境をCHERRY様にご指導頂いた通り行うと、/var/spool/mail/rootでは受信していなかったので、恐らく到達しているものと思われます。
    (レスポンスの遅いお客様のため、明日電話にて確認してみます)

    まだ到着確認が取れておりませんが、状況はかなり変わりましたのでベストアンサーとさせて頂きたく思います。
    有難うございました。

    キャンセル

  • 2017/04/06 18:53

    CHERRY様

    遅くなりましたが、きちんと届いている旨お客様からも連絡がありました。
    完全解決です。
    改めて、有難うございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20348questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CentOS

    2708questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。