1

私は PHP の mail() を使用しています。私たちのサイトからのメールは正常に送受信されます。

ユーザー「theArtist」は、当サイトで絵画を売りに出しています。ユーザー "RichGuy" はそれを見て、私たちのサイトには、RichGuy が自分の電子メール アドレスと "theArtist" へのメッセージを入力するフォームがあります。

"RichGuy" がこのフォームに入力して [送信] をクリックすると、PHP コードがデータベースからアーティストの電子メール アドレスを取得し、それを mail() の呼び出しで使用される "To" 電子メール アドレスにします。RichGuy はそのフォームに返信メールを入力したばかりなので、mail() の呼び出しで "From: " ヘッダーに "RichGuy@gmail.com" が使用されます。

mail() コードをテストするために、2 つのダミーの電子メール アカウントをセットアップしました。

受信者が受信したメッセージの「差出人」の部分に私の本名が表示されるため、私の実名が問題です。私の本名と hotmail のメールアドレスは FredSmith@hotmail.comです。「theArtist」も hotmail.com アカウントであることに注意してください。ここで関係があるかどうかはわかりません。私は何年も前から FredSmith@hotmail.com アカウントを持っています。他の 2 つの「ダミー」アカウントは、この mail() コードをテストするためだけのものです。

PHPコードは次のとおりです。

 $sendTo = "theArtist@hotmail.com";
 $subject = "I want that painting now!";
 $theMsg =  "That's a fine abstract piece, I'll buy it.";
 $headers = "From: RichGuy@gmail.com";

 if(mail($sendTo, $subject, $theMsg, $headers))
 {
       // success
 }

上記の電子メールは、theArtist@hotmail.com によって正常に受信されています。「theArtist」が受け取るものは次のとおりです。


あの絵が今欲しい!

フレッド・スミス(RichGuy@gmail.com)

宛先: theArtist@hotmail.com

差出人: RichGuy@gmail.com

送信: 火曜日 9/24/13 8:20 PM

宛先: theArtist@hotmail.com

素晴らしい抽象画ですね、買います。


一体なぜ、私の本名である Fred Smith が theArtist@hotmail.com のメールにこのように表示されるのですか? 私の本名を使用して認証している 2 つのダミーの電子メール アカウントを使用しているにもかかわらず、mail() は舞台裏にありますか? ローカルホスト Web サーバーと、Web 上で実行されているステージング サーバーの両方で同じ動作が見られます。

そこで、次のように問題を強制しようとしました。

 $sendTo = "theArtist@hotmail.com";
 $subject = "I want a deal on that painting";
 $theMsg =  "How about a discount on your painting?";
 $headers = "From: RichGuy@gmail.com";
 if(mail($sendTo, $subject, $theMsg, $headers, '-fRichGuy@gmail.com'))

変化なし。私の本名、フレッド・スミスは、送信者の電子メールアドレス、RichGuy@gmail.com の直前にどういうわけか追加されています --


あの絵の取引が欲しい

フレッド・スミス(RichGuy@gmail.com)

宛先: theArtist@hotmail.com

差出人: RichGuy@gmail.com

送信: 火曜日 9/24/13 8:20 PM

宛先: theArtist@hotmail.com

あなたの絵の割引はどうですか?


これはどういうわけか認証の問題でしょうか?
mail() が「ああ、サイトの本当の「所有者」は Fred Smith であることを認識する可能性はありますか?そのため、RichGuy@gmail.com でも theArtist@hotmail.com でも認証できず、電子メールを送信する前に認証する必要があります。フレッドスミスで。」

ところで、ローカルホスト Web サーバーの sendmail debug.log を確認しましたが、電子メール メッセージと共に "Fred Smith" がログに記録されていません。

4

2 に答える 2

1

これを解決した方法は次のとおりです。

$sendername = strtok($senderEmail, "@");
$headers = "From: " . $sendername . " <" . $senderEmail . ">\r\n";

送信者の電子メールの「ハンドル」を「@」記号まで取り、「theSendersName」の形式を使用してメールの「From」ヘッダーをフォーマットしただけで、機能しました。

于 2013-10-11T01:10:44.503 に答える