php邮件“发件人”标头的问题

Posted

技术标签:

【中文标题】php邮件“发件人”标头的问题【英文标题】:problem with php mail 'From' header 【发布时间】:2011-01-02 02:43:41 【问题描述】:

我正在建立一个网站,在用户注册时向他发送电子邮件。

我的代码(它的要点):

<?php
$to = "helloworld@gmail.com";
$subject = "Test mail";
$message = "Hello! \nThis is a simple email message.";

$headers = "From: munged@gmail.com";
$headers .= "\r\nReply-To: munged@gmail.com";
$headers .= "\r\nX-Mailer: PHP/".phpversion();

mail($to,$subject,$message,$headers);

echo "Mail Sent.";
?> 

问题是当邮件投递时,from 标头仍然是munged@box123.bluehost.com,而reply-to 被更改为指定值。

box123.bluehost.com 是托管网站的服务器的主机名。

那我做错了什么?如何使“发件人”地址与回复地址相同?

是我做错了什么,还是网络主机犯规了?

【问题讨论】:

【参考方案1】:

我有同样的问题,我检查了 php.net 网站。并找到了正确的格式。 这是我更新的代码。

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From:  ' . $fromName . ' <' . $fromEmail .'>' . " \r\n" .
            'Reply-To: '.  $fromEmail . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

\r\n应该在双引号(")中,单引号(')不行。

【讨论】:

“\r\n 本身应该用双引号(”),单引号(')不起作用。” - 谢谢!这是我的问题! $fromName 也应该用双引号引起来。如果变量包含某些字符(单引号或双引号,例如“John O'Malley”,句点例如“Suzy Q.”等),没有引号可能无效。正确的行是$headers .= 'From: "' . $fromName . '" &lt;' . $fromEmail . '&gt;' . "\r\n" . ' &lt;' . $fromEmail .'&gt;' 对我有用。我一使用这种格式,他们就开始进来了。谢谢!【参考方案2】:

标题在我的共享主机上不适合我,原因是我在标题中使用了我的 hotmail 电子邮件地址。 我在我的 cpanel 上创建了一封电子邮件,并在标题中设置了相同的电子邮件,是的,它就像一个魅力!

 $header = 'From: ShopFive <site@mysite.org>' . "\r\n";

【讨论】:

【参考方案3】:

我通过在 Cpanel 中添加电子邮件帐户并将相同的电子邮件添加到像这样的字段的标题中解决了这个问题

$header = 'From: XXXXXXXX <test@test.org>' . "\r\n";

【讨论】:

【参考方案4】:

原来发帖人的服务器(blueHost)有a FAQ concerning this very question。

第 206 条。


这是因为我们的服务器要求您(或您的脚本)在电子邮件标题中使用格式正确、有效的 From: 字段。如果 From: 字段格式不正确、为空或 cPanel 中不存在电子邮件地址,则 From: 地址将更改为 username@box###.bluehost.com

您必须更改正在使用的脚本才能正确使用有效的From: header.

应该工作的标题示例如下:

发件人:user@domain.com 来自:“用户”

不起作用的标头示例:

发件人:“user@domain.com” 来自:用户@domain.com 发件人:user@domain.com

我们的服务器将不接受电子邮件地址的名称与电子邮件地址相同。它不会接受电子邮件地址的双重声明。

对于 Joomla 和 Wordpress 等脚本,您需要按照他们的文档正确格式化 from 字段。 Wordpress 将需要 Mail From 插件。

注意:您使用的电子邮件地址必须是在 面板。

【讨论】:

您是否有文章链接可以添加到您的答案中? 事实证明,至少在我的服务器上,突然间 from 标头不能包含非英文字母(例如希伯来语)。切换到From: user@domain.com 有效。【参考方案5】:

我意识到这是一个旧线程,但自从我昨天搬到 bluehost 后我遇到了同样的问题。它可能不是选定的答案,但我支持 bluehost 文章 206 回复。

我在控制面板中创建了一个有效的电子邮件并将其用作我的发件人地址,并且它有效。

【讨论】:

【参考方案6】:

虚拟主机并没有真正犯规。这并不严格按照规则 - 但与一些旨在防止垃圾邮件的惊人发明相比,它并不是一个特别糟糕的发明。

如果您确实想从“@gmail.com”发送邮件,为什么不直接使用 gmail SMTP 服务?如果您无法重新配置运行 PHP 的服务器,那么有很多电子邮件包装工具可以让您指定自定义 SMTP 中继 phpmailer。

C.

【讨论】:

您将如何使用联系表来做到这一点,以便用户可以使用所有者网站上的联系表,通过服务器上的 mailer.php 和 php mail() 向网站所有者发送电子邮件? 在互联网上搜索答案,询问您的托管服务提供商,如果您没有解决方案,请在此网站或类似网站上发布新问题并测试答案。【参考方案7】:

编辑:我刚刚注意到您正在尝试使用 gmail 地址作为发件人值。 这是行不通的,而且 ISP 覆盖它是正确的。如果您想将回复重定向到您的外发邮件,请使用reply-to

适用于许多 ISP 的有效地址的解决方法:

尝试在mail() 命令中添加第五个参数:

mail($to,$subject,$message,$headers,"-f your@email.here");

【讨论】:

我实际上没有使用“发件人:hithere@gmail.com”。我正在使用其他地址,但我想您的意思是服务器不允许我作为某个随机人发送邮件。但这是大错特错! 对不起,伙计,但就是这样,对!检查您的垃圾邮件文件夹以获取支持证据。 :) 所以我联系了我们网络主机的管理员,并将 reqd 电子邮件 ID 添加为“授权”。现在它起作用了。谢谢! 我也有同样的问题,但添加此代码后它通常无法正常工作?【参考方案8】:

为了防止网络钓鱼,某些邮件服务器会阻止 From 被重写。

【讨论】:

是的,但应该可以使用域作为注册到该服务器的发件人名称。强行将 anything 覆盖到服务器的基本主机名是荒谬的。

以上是关于php邮件“发件人”标头的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Codeigniter 在电子邮件上添加“发件人”标头

作为发件人,使用 API 或标头,是不是可以检测电子邮件是不是使用 Gmail 的“计划发送”发送?

php邮件功能中的抄送在发件人(发件人)和抄送邮件地址相同的情况下不起作用[重复]

PHP电子邮件表单发件人名称而不是电子邮件?

PHP 没有本机邮件的PHP邮件发件人()

PHP 电子邮件表单 - 定义发件人