PHP 电子邮件“发件人”字段中的额外字符


Extra characters in PHP email "from" field

我正在尝试从PHP发送电子邮件,尽管它正在工作,但我注意到我在电子邮件的"发件人"部分收到了很多额外的东西。我假设额外的东西是来自我的服务器的信息?

例如,如果$from = "myname",而不是"myname"只按原样在电子邮件中通过字段,我会得到类似以下内容:

myname@p3nlhg.phx3.secureserver.net

这是我正在使用的PHP,重要的部分是我的$from变量:

$from = "myname";
mail($to,$formSubj,$formMssg,$from);

老实说,这就是我所拥有的一切,仅此而已(就$from而言)。我怎样才能清理它或让它只出来 $from 的普通值 ,在这种情况下是 "myname" ,出来?

mail 函数的第 4 个参数不以这种方式工作。它需要标头信息。要实现您想要执行的操作,请使用:

$header = "From: myname <no-reply@test.com> 'r'n";
mail($to,$formSubj,$formMssg,$header);

你也不应该使用孤独的myname。您需要一个有效的电子邮件地址字符串:myname <no-reply@test.com>no-reply@test.com。如果你只是把myname,PHP 会尝试将其解释为电子邮件地址。这就是为什么你会得到myname@p3nlhg.phx3.secureserver.net. p3nlhg.phx3.secureserver.net必须是服务器的主机名。

header 参数的一个好处是,您可以使用它来指定其他不太常见的字段。 例如:

$headers  = 'MIME-Version: 1.0' . "'r'n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "'r'n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "'r'n";
$headers .= 'Cc: birthdayarchive@example.com' . "'r'n";
$headers .= 'Bcc: birthdaycheck@example.com' . "'r'n";

请注意,您需要在每个标头属性的末尾放置回车/换行符 ( 'r'n )。简单的换行将不起作用。

根据mail文档,您使用$from作为$additional_headers参数。

相反,请将$from更改为适当的标头。例如

$from = "myname";
$headers = "From: $from <user@example.com>";
mail($to, $formSubj, $formMssg, $headers);

根据additional_headers的文档,

发送邮件时,邮件必须包含"发件人"标头。这可以使用 additional_headers 参数设置,也可以在 php.ini 中设置默认值。

如果不这样做,将导致类似于警告的错误消息:mail():未在 php 中设置"sendmail_from".ini或缺少自定义"From:"标头"发件人"标头在 Windows 下也设置了返回路径

它来自您在服务器中安装的邮件服务器,请尝试切换到另一个,例如后缀,快递或其他东西。