私のメールリレーはうまく動作します。私のDigOcホスト(多くのドメインがある)は、私のメールアカウントにログインしている別のcPanelベースの共有ホスティングプランのメールサーバーを介してメールを中継します。 (私にとっては、これはPostfixをインストールして設定するよりも簡単です。)
次のようにAT&T SMSテキストメッセージを送信する場合を除いて、すべてがうまくいきます。
(もちろん私はこの番号を変えました。)
WebブラウザでGmailを介して手動でメールを送信する場合は機能しますが、sendmailメール技術を含むPHPスクリプトやBashスクリプトを使用している場合は機能しません。メールログを確認してみると次のようになります。下記のIPアドレスと電話番号を意図的に変更したことをお知らせします。
Jun 8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: from=root, size=51, class=0, nrcpts=1, msgid=<[email protected]>, relay=root@localhost
Jun 8 17:25:39 corp1 sm-mta[5827]: u58HPdKW005827: from=<[email protected]>, size=314, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA-v4, relay=corp1.104-226-131-166-com [127.0.0.1]
Jun 8 17:25:39 corp1 sendmail[5826]: u58HPdCP005826: [email protected], ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30051, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (u58HPdKW005827 Message accepted for delivery)
Jun 8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: to=<[email protected]>, ctladdr=<[email protected]> (0/0), delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120314, relay=mx3a.txt.att.net. [166.216.149.129], dsn=5.0.0, stat=Service unavailable
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005827: u58HPdKW005829: DSN: Service unavailable
Jun 8 17:25:39 corp1 sm-mta[5829]: u58HPdKW005829: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent
私は次の行に問題があると強く疑います。
Jun 8 17:25:39 corp1 sm-mta[5829]: STARTTLS=client, relay=mx3a.txt.att.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
このメールメッセージが正しく機能するためにSendmail設定で実行する必要があることは確実ですか?
編集する
@Anderzejの提案を受け入れてそうしました。このステップ。私が得た答えは次のとおりです。
[email protected]... Connecting to mx3a.txt.att.net. via esmtp...
220 alpemg-mtmta04 bizsmtp ESMTP server ready
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO corp1.104-226-131-166-com
250-alpemg-mtmta04 hello [104.226.131.166], pleased to meet you
250-HELP
250-SIZE 1500000
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 OK
>>> MAIL From:<[email protected]> SIZE=65
554 5.1.0 corp1.104-226-131-166-com has no MX or A record
/root/dead.letter... Saved message in /root/dead.letter
Closing connection to mx3a.txt.att.net.
>>> QUIT
答え1
@JennyD ありがとうございます。これが解決策のようです。
デバッグを有効にするsendmailテストスクリプトで問題が何であるかを正確に確認できます。
一部のメールサーバーは、他のホストを介して中継されてもユーザーを確認します。したがって、/etc/mail/sendmail.mc ファイルの MASQUERADE_AS() に有効なドメインが必要で、同じサーバー上に存在し、A レコードと MX レコードに対する DNS クエリに応答する必要があります。ドメインは、「送信者:」または「返信:」を指定する実際のドメインである必要はなく、受信者のメールサーバーが確認するドメインのみを使用してください。
MASQUERADE_DOMAIN を読み、allmasquerade、masquerade_envelope、および masquerade_entire_domain 関数を読み取って必要かどうかを確認するか、1 つのホストで複数のドメインにメールを提供する場合は、複数のテストを実行する必要があります。私の場合、そのようなものは必要ありません。これで、同じホストからのようにx.com、y.com、z.comにメールを送信できるようになり、AT&Tメールサーバーがメールが送信されたメールサーバーを確認すると、私のリストにx.comが表示されます。ケース。ただし、SMSのテキスト通知メッセージが表示されたら、x.com、y.com、z.comから送信されたように見せることができます。
AT&Tメールサーバー(およびその他のメールサーバー)では、
mail()
PHPのコマンドに5番目のパラメータを追加する必要がある奇妙な状況に直面する可能性があります。 x.comが私が望む送信者:アドレスドメインであり、受信者:アドレスがパラメータの後にスペースを含まないモバイル通知を調整する必要があります。mail($sEmail,'',"HERE IS YOUR ALERT",'','[email protected]');
$sEmail
[email protected]
-f
答え2
最初の主な問題は、sendmailが存在しないドメインに存在しないホスト名を使用するように構成されていることです。 「104-226-131-166-com」というドメインはありません。これは、スクリプトやシステム機能が送信者アドレスを指定せずにメールを送信するたびに無効なアドレスを使用することを意味します。これは、最終的に一部のシステム(att.netなど)が他のシステムから送信されたメールを拒否することを意味します。スパムまたは自動廃棄されます。受信者のシステムがメッセージを受け入れたが転送に失敗した場合、問題を通知するエラーメッセージは受信されません。
デフォルトでは、使用されるホスト名がサーバーの物理ホスト名になるようにsendmail構成を変更する必要があります。
また、スクリプト自体の送信者アドレスをエラーメッセージを送信するアドレスに設定するように変更する必要があります。