メールサーバーがWebホスト上にない場合のsendmailおよびMXレコード
質問
これは簡単に修正できると確信している問題ですが、私は一日中頭を打ち続けています。
クライアント用の新しいWebサイトを開発しています。 Webサイトは、website.com(これは一例です)にあります。私は、訪問者のリクエストをrequests@website.comにメールで送信するPHPフォームスクリプトを持っています。
これを別のドメインのステージングサーバーでコーディングすると、すべて正常に機能しました。 website.comに移動したときに、メールメッセージが届きませんでした。 Webサーバーは、主要なISPを持つ仮想ホスト上にあります。
それ以来、私が学んだことは次のとおりです。私のクライアントのメールサーバーは、オフィスの物理的なボックスにあるMicrosoft Exchangeです。外の世界の誰かがrequests@website.comにメールを送るたびに、メールが届きます。 ただしウェブサーバーが同じメールアドレスに送信すると、毎回失敗します。これはPHPの問題ではありません 。 Webサーバーへのシェルをセキュリティで保護し、sendmailとUNIXメールアプリケーションの両方でこれをテストしました。また、シェルからさまざまなメールアカウントにメールを送信してテストしました。たとえば、website.comドメインの誰にもメールを送信できません。
要するに、私がwebsite.comにログインすると、requests @ website.com、user @ website.com、another_user @ website.comへのメールはすべて失敗します。他のすべてのアドレスは正常に機能します。私が発見したのは、ドロップされたメールがウェブサーバーの「キャッチオール」にルーティングされることです。受信ボックスのどこに座っているかを説明します。
website.comでMXルックアップを行いました。 MXレコードはmailsec.website.comを指します。 mailsec.website.comのポート25にtelnetで接続して、SMTPサーバーを確認できます。
requests@website.comにメールを送信しているときに、website.comがMXルックアップを実行していないようです。私の理論では、ドメインをローカルとして認識し、「リクエスト」がないことがわかります。配信するユーザーアカウント、およびキャッチオールアカウントにメールをドロップします。私が欲しいのは、sendmailにMXルックアップを実行させ、Exchangeサーバーにメッセージを送信することです。私はここで機知に富んでいます。これを行う方法がわかりません。
その点で、私はここから離れて、これを完全に誤診しているかもしれません。インターネットメールとMXは常に私にとって黒魔術のように思えましたが、この質問には私の無知が確かに現れています。
解決
問題は、sendmail(プロセス)がローカルのsendmailデーモンと通信していることだと思います。ローカルsendmailデーモンは、website.comであるため、電子メールの配信方法を知っている必要があると考えています。残念ながら、toフィールドの実際のアドレスはWebサーバー上に存在しないため、「キャッチオール」にダンプします。メールボックス。 ... @ website.com宛てのメールがローカルで処理されるのではなく、メールエクスチェンジャーに転送されるように、ISPに問い合わせてsendmailの構成を更新する必要があります。
他のヒント
デフォルトでは、Sendmailはローカル電子メールドメインのリストを推測します。 sendmail.mcファイルで次の行を使用してオフにできます。
define(`confDONT_PROBE_INTERFACES',`True')
変更前後のルートリストローカルメールドメインとして。
echo '$=w' | sendmail -Am -bt
「手動で」追加するドメインが表示されます。自動推測を無効にした後、(通常)/ etc / mail / local-host-namesファイルに。
PS sendmailの質問には、news:comp.mail.sendmailを使用できます
tvanfossonには基本的にはありますが、一時的な回避策として、 'user @ mailsec.website.com'にメールを送信するようにスクリプトを変更して、メールが実際のメールサーバーに配信されるようにする必要があります。
インクルードするためにtsm.cfファイル(/ etc / mail /など)を編集します
FEATURE(relay_entire_domain)
DOMAIN()行とMAILER()行の間。ファイルを編集しているので、セキュリティを向上させることもできます
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')
tsm.cfファイル(または any sendmail構成ファイル)を変更した後、sendmailプロセスを再起動またはSIGHUPします。
ドメインのWWWサーバーとMXサーバーが同じプロセス空間に存在しないため、この変更が必要です。このFEATUREは、sendmailをトリガーして、その外部配信メカニズムを使用してドメインのメッセージを処理します。
tsm.cfファイルの編集部分は次のようになります。
DOMAIN(website.com)dnl
FEATURE(relay_entire_domain)dnl
define(`confPRIVACY_FLAGS',``noexpn,novrfy'')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
私にとっては、WebサイトをホストしているWebサーバーにMXレコードを追加して、元のドメインネームサーバーに割り当てられたホストを指すようにしました。ここに示されているケースでは、mailsec.website.comを指すmxレコードになります
ここは新しいです。 RB_CWI の回答を拡張したかったのですが、コメントすることはできません。 彼の解決策はうまくいきました。
DOMAIN()を定義するのに不要です。
ただし、システムにsendmail-cfパッケージをインストールする必要がありました。
以下の手順は、 CentOS 6.5 で行われました
まず、sendmail-cfをインストールします
sudo yum install sendmail-cf
次に、senmail.mcを編集します
sudo vi /etc/mail/sendmail.mc
ファイルの下部にFEATURE(relay_entire_domain)dnlを追加します。次のようになります。
...
FEATURE(relay_entire_domain)dnl
MAILER(smtp)dnl # right above this line
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl
ファイルを保存し、sendmailを再起動します。
sudo service sendmail restart
Gotは同じ問題を抱えていました。 MXは外部Exchangeサーバーを指しますが、php / sendmailはこのレコードを検索しませんでした。代わりに、このWebサーバーにWordPressによって投稿されたメールは、catchall-mailboxにドロップされました。
解決策は、ウェブサーバー上のすべてのメールボックスを削除することでした。 sendmailはMXに興味を持ち、すべてのメールはExchangeに送信されました。
ただし、Exchangeは送信メールのSmartHostとしてWebスペースのメールサーバーを使用します。これに対する解決策として、メールサーバーへのアクセスにFTP資格情報を使用することができました。このソリューションは、この惑星のすべてのプロバイダーで機能するとは限りませんが、私たちの場合(all-inkl.com)はうまくいきました。