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

时间:2012-05-31 03:55:12

标签: php email

我正在尝试从PHP发送电子邮件,虽然它正在运行,但我注意到我在电子邮件的“发件人”部分收到了很多额外的东西。额外的东西,我假设,是 来自我服务器的信息?

例如,如果$from = "myname",而不是"myname"只是来自字段中的电子邮件,我会得到类似的内容:

  

myname@p3nlhg.phx3.secureserver.net

这是我正在玩的PHP,重要的部分是我的$from var:

$from = "myname";

mail($to,$formSubj,$formMssg,$from);

老实说,这就是我所拥有的,没有或多或少(就$from而言)。我该如何清理它或使其成为只有$from的简单值(在这种情况下是"myname")出现?

3 个答案:

答案 0 :(得分:2)

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

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

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

根据additional_headers的文档,

  

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

     

如果不这样做,将导致类似于警告:mail()的错误消息:&#34; sendmail_from&#34;未设置在php.ini或custom&#34; From:&#34;标题丢失 发件人 标头在Windows下也设置了 Return-Path

答案 1 :(得分:2)

邮件功能的第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参数的一个好处是你可以用它来指定其他不太常见的字段。 e.g:

$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)。简单的换行不起作用。

答案 2 :(得分:-1)

它来自您已安装在服务器中的邮件服务器,尝试切换到另一个邮件服务器,如postfix,courier或其他。