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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

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

PHP

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

Postfix

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

Q&A

解決済

1回答

6189閲覧

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

saken649

総合スコア60

CentOS

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

PHP

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

Postfix

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

0グッド

0クリップ

投稿2017/03/31 11:50

編集2017/03/31 13:45

###前提・実現したいこと
何卒お力添えをお願い致します。

コーポレートサイトのリニューアルにあたり、新たにメールフォームを設置し、お問い合わせが出来るようにしたいです。
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のログ→そもそも存在せず
どのログにもこれ以上怪しそうなログは残っていないようでした。。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kongou-ae

2017/03/31 12:51

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

2017/03/31 13:05 編集

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

2017/03/31 13:51

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

回答1

0

ベストアンサー

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/03/31 14:03

編集2017/04/03 10:58
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saken649

2017/04/03 10:32

CHERRY様 ご回答有難うございます。 ご教授頂いたファイルを確認したところ、確かに仰る通りの状況となっておりました。 検証環境に、逆にお客様ドメイン名をホストにして、mydestinationがそのドメインになるように設定してみたところ、見事に状況を再現出来ました。 お客様環境をCHERRY様にご指導頂いた通り行うと、/var/spool/mail/rootでは受信していなかったので、恐らく到達しているものと思われます。 (レスポンスの遅いお客様のため、明日電話にて確認してみます) まだ到着確認が取れておりませんが、状況はかなり変わりましたのでベストアンサーとさせて頂きたく思います。 有難うございました。
saken649

2017/04/06 09:53

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問