PHP スクリプトから電子メールを送信することに取り組んでいます。 mail()
関数がトリガーされると、受信者のメールボックスは特定のサービス (seznam.cz) によってホストされ、メッセージはメール クライアント (Mozilla Thunderbird) と ESET ウイルス対策ソフトウェアにダウンロードされ、メッセージがチェックされます。破損しているようです。
この問題は、ウイルス対策ソフトウェアがメール メッセージに特別なヘッダーを挿入し、その後に空行を残すことが原因であると考えられます:
リーリー私の電子メール クライアントは、メッセージがプレーン テキストであり、X-PHP-Originating-Script
という行で始まると考えます。メッセージの残りの部分には、すべての HTML マークアップが含まれます。
これは電子メールの送信に使用するスクリプトです:
リーリーただし、Laravel フレームワークを使用すると、電子メールは正しく送信され、表示されます。違いを比較したところ、X-PHP-Originating-Script
ヘッダーが Laravel によって送信されていないことがわかりました。
これが原因でしょうか?どうすれば解決できますか?
これは単に行区切り文字の違いの問題である可能性があります。
PHP 7.4 までは、X-PHP-Originating-Script の後の区切り文字は
他のすべてのヘッダーは\n
でした (これは、PHP 8 では \ を使用してに変更されました) r\n
、さらに最近ではマスターで他の要因に基づいて意思決定を行っています)。\r\n
を使用して連結されるため、ウイルス対策ソフトウェアはヘッダーを追加するときに混乱を引き起こす可能性があります。これにより、二重改行が作成され、クライアントによって本文の開始として解釈されます。
\n
解決策は、PHP バージョンの行末を一致させるか、php のすべての設定と
\rを含むすべての文字を表示するエディターで元のメッセージを表示すると、よりよく理解できる可能性があります。
mail.add_x_header = Off で
XX-PHP-Originating-Script
时删除ヘッダーを削除することです。 .ini 中間。