1

sendmailパッケージとphpを使用しています。PHPでmail関数を使用しようとすると、trueが返されますが、何も送信されません。

php設定

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path =/usr/sbin/sendmail -t -i

phpファイル

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
trace(mail('jamie@domain.tld','Testing','test.'));

メーラーログはこれを表示しています

mail() on [/var/www/misc/mail.php:5]: To: jamie@domain.tld -- Headers: 

次のようにCLIを介してsendmailを実行します。

echo -e "To: jamie@domain.tld\nSubject: Test\nTest\n" | sendmail -bm -t -v

「Senderok」、「Recipientok」を返します

phpがメールを送信しない原因になっている可能性のあることを知っている人はいますか?

4

2 に答える 2

6

PHPはメール配信とは何の関係もありません。そのジョブは、指定されたSMTPエージェント/サーバーに電子メールを渡すことで開始および終了します。mail()がブール値のFALSEを返さない場合、PHPのジョブは成功しており、画像から外れています。

SMTPサーバーのログをチェックして、ハンドオフが完了した後に電子メールがどうなるかを確認します。mail()PHPが本当に打撃を与えているため、メールが拒否/グレーリスト化/スパムフィルタリングされて忘却されている可能性が非常に高いです。

SwiftmailerまたはPHPMailerのいずれかに切り替えることを検討してください。どちらも、mail()よりもはるかに優れたPHP<->SMTPインタラクションの診断を提供します。

コマンドラインから手動でテストすることはほとんど意味がありません。シェル環境は、スクリプトが実行される可能性のあるWebサーバー内環境(リンゴとオレンジ)とは大きく異なります。

于 2012-07-27T16:14:10.353 に答える
1

これは誤解を招く可能性があります。PHPは、その役割を果たしているため、trueを返します。ただし、SMTPサーバーが要求を受け入れるという保証はありません。

これが一度私に起こったとき、私のホストは、すべてのスクリプトメールがヘッダーに「from」アドレスを備えていなければならないという新しい規定を実装していたことがわかりました。これは、ホスティングアカウントに関連付けられた有効なアドレスでなければなりません。

その可能性を調査する価値があるかもしれません。

于 2012-07-27T16:15:07.927 に答える