我正在使用PHP的邮件() - 来自我们网站的电子邮件被成功发送和接收。
用户“theArtist”在我们的网站上出售一幅画。用户“RichGuy”看到它,我们的网站有一个表格,RichGuy将他的电子邮件地址和消息输入“theArtist”。
当“RichGuy”填写此表单并点击“发送”时,我们的PHP代码会从数据库中检索艺术家的电子邮件地址,并使其成为mail()调用中使用的“收件人”电子邮件地址。由于RichGuy刚刚在该表单上输入了回复电子邮件,因此“RichGuy@gmail.com”用于调用mail()的“From:”标题。
我设置了两个虚拟电子邮件帐户来测试我们的mail()代码,一个用于发送邮件(RichGuy @gmail.com和一个用于接收邮件(theArtist@hotmail.com)。
我的真实姓名是问题,因为它显示在收件人收到的邮件的“发件人”部分。我的真实姓名和我的Hotmail电子邮件是 的 FredSmith@hotmail.com 即可。请注意,“艺术家”也是一个hotmail.com帐户,不确定这是否有影响。我已经有了很多年的FredSmith@hotmail.com账号。另外两个“虚拟”帐户是新的,仅用于测试此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 - 这是“艺术家”收到的内容:
Fred Smith (RichGuy@gmail.com)
致:theArtist@hotmail.com
来自:RichGuy@gmail.com
发送:星期二9/24/13 8:20 PM
致:theArtist@hotmail.com
这是一个很好的抽象作品,我会买它。
为什么我的真实姓名Fred Smith出现在Artist@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 -
Fred Smith (RichGuy@gmail.com)
致:theArtist@hotmail.com
来自:RichGuy@gmail.com
发送:星期二9/24/13 8:20 PM
致:theArtist@hotmail.com
你的画作折扣怎么样?
这可能是某种身份验证问题吗? mail()是否有可能识别出“ah-HAH,网站的真正'所有者'是Fred Smith,因此我们无法在RichGuy@gmail.com上进行身份验证,也无法在theArtist@hotmail.com上进行身份验证,我们必须在发送电子邮件之前进行身份验证关于FredSmith。“
顺便说一句,我检查了我的localhost网络服务器上的sendmail debug.log,并且没有记录电子邮件的“Fred Smith”。
答案 0 :(得分:1)
检查PHP.ini [邮件功能]配置部分,我的猜测是它出现如下:
[mail function]
SMTP = smtp.live.com
smtp_port = 25
auth_username = FredSmith@hotmail.com
auth_password = fredspassword
外发邮件很可能使用您的普通帐户使用Hotmail进行身份验证,然后添加发件人标头。许多ISP现在阻止SMTP,因此这通常是从本地开发环境中获取SMTP的唯一方法。
答案 1 :(得分:1)
以下是我解决这个问题的方法:
$sendername = strtok($senderEmail, "@");
$headers = "From: " . $sendername . " <" . $senderEmail . ">\r\n";
我只是将发件人的电子邮件“句柄”发送到“@”符号,并使用格式“theSendersName”格式化邮件“发件人”标题,然后就可以了。