メールサーバーがWebホスト上にない場合のsendmailおよびMXレコード

StackOverflow https://stackoverflow.com/questions/322659

質問

これは簡単に修正できると確信している問題ですが、私は一日中頭を打ち続けています。

クライアント用の新しい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)はうまくいきました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top