【发布时间】:2014-05-10 03:05:57
【问题描述】:
我有一个奇怪的问题。
我有一个“标准”电子邮件,我使用它来包装 php mail() 函数。这已经使用了几年,在我网站的两个地方每天都非常高兴地发送邮件。但是,在同一主机上同一站点的不同部分重新使用相同的包含时,我发现我无法发送包含“发件人”标头的邮件。唯一的区别是站点上的这个新发送位置是一个基本的身份验证保护目录。
所以在人们跳进来告诉我这个或那个之前,请记住,这与它在同一主机上同时工作的代码完全相同,因此完全相同的 include 工作在两个位置而不是第三个位置。
所以我设置了其他标题(因为它带有多部分 HTML 电子邮件):
$headers = "From: $fromName <$fromEmail>\n";
$headers .= "Reply-To: \"$fromName\" <$fromEmail>\n";
$headers .= "Sender: \"$fromName\" <$fromEmail>\n";
这在站点的两个位置都可以正常工作,但是包含“发件人”行会导致同一主机上的第三个位置的邮件发送失败。该代码在我的开发机器上也可以正常工作,只是 Live 托管的盒子不会从第三个位置发送邮件。现在...
- 是的,我知道我使用的是“\n”而不是“\r\n”,但我的经验是 "\r\n" 在 Windows 主机上是必需的,但在 *ix 上会导致问题 主机 - 是的,我知道 RFC 说 CRLF - 所以这是“固定的” 稍后在包装器中,如果它在 Windows 主机上但保留为 "\n" on *ix
- 不,设置“\r\n”没有任何区别!
- 我已经体验过 mail() 第五个参数并使用 -f,但是 只给我代表发送的邮件
- “发件人”字段实际上具有收件人打开邮件时看到的效果;然而,从 Pretty_name [email_address],至少在 Outlook 中,发件人在邮件列表中显示为 email_address,而不是“Pretty_name”
- 我使用过 ini-set,但它只设置了一个电子邮件地址,并且邮件已经与所需的 From Email 地址一起发送,它的“Pretty_name”不起作用
所以请记住 - 完全相同 代码在同一站点的其他地方运行而没有任何问题,但这里的问题似乎是(出于我尚未理解的原因)相同的代码只能在没有来自该位置的“发件人”标头的情况下使用。
有人对这种看似不一致的行为有什么想法吗?
谢谢
【问题讨论】:
-
您能否详细说明实际失败的原因:服务器是否报告它无法投递邮件,或者您只是没有收到邮件?您是否尝试过发送到不同的帐户以查看它是否被垃圾邮件过滤器或有效来源的类似限制阻止?
-
mail() 返回布尔值 FALSE,表示邮件未发送...而且我没有收到任何内容。没有发出错误或警告,只是不会有它!