0

PHPのメール機能を使用して、ユーザーに電子メールを送信しています。ただし、一部のユーザーはそれらをまったく受信しません (スパム フィルターによっても受信されません)。エラーを見つけようとして、(ユーザーのメール プロバイダーの親切な人たちから) サーバーからどのような応答が得られるかを尋ねられました。

しかし、私はそれを取得する方法がわかりません。サーバーのどこかに保存する必要がありますか? その場合、どこで?それともphpから返されますか?または、どこかのエラー ログに保存されますか? それとも手に入れる方法もありますか?

Ubuntu サーバーを実行しており、メールに postfix を使用しています

4

3 に答える 3

2

エラーは、少なくともメール サーバーのログに記録されます。メールの差出人アドレス/エンベロープ送信者は何ですか? バウンス メッセージすべてそのアドレスに送信されます。そのアドレスが配信不能である場合、バウンスもバウンスしている可能性があります。From:そのため、最初に、ヘッダーまたはヘッダーに指定されている電子メール アカウントにアクセスできることを確認する必要がありますReturn-path:。バウンスがない場合は、メール サーバーのログを調べる必要があります。postfix は通常、/var/log/mail.log をログに記録しますが、これは変更できるため、構成が異なる可能性があります。

バウンス メッセージを処理するもう 1 つの良い方法は、VERP ( http://en.wikipedia.org/wiki/Variable_envelope_return_path ) Variable Envelope Return Path などを使用することです。このようにして、戻ってきたアドレスを確認することで、バウンス メッセージを自動的に処理できます。

于 2013-04-23T11:34:37.533 に答える
0

PHPネットから:

mail() でエラーが発生した場合は、単に false を返します。その理由を見つけるには、sendmail コマンドがどこにエラーを出力したかを調べる必要があります。Linux では、これは通常 /var/log/messages です。

/var/log/httpd/errors (apache は /usr/sbin/sendmail が false を返すことがエラーであることを認識していないため) や /var/log/mail/ (メールは postfix まで届くことはなく、SMTP/配信エラーは発生しませんでした。)

http://php.net/manual/en/function.mail.php

ただし、電子メールの結果を変数に簡単に保存できます。前述のように、trueまたはのみになりますfalse

于 2013-04-23T11:34:01.423 に答える
0

以下のように、メールが送信されたかどうかを確認できます。

<?php
 $to = "recipient@example.com";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";
 if (mail($to, $subject, $body)) {
   echo("<p>Message successfully sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
 ?>

また、メッセージの送信または失敗を保存するログを個別に作成することもできます。

于 2013-04-23T11:34:54.453 に答える