【问题标题】:Header not display correctly on Email PHP mail标头在电子邮件 PHP 邮件上无法正确显示
【发布时间】:2017-03-09 01:45:56
【问题描述】:

我有以下代码来发送我的电子邮件:

$EmailFrom= "staff@homes.com";
$EmailTo = "alejo@yahoo.com, hunterno1@gmail.com";
$Subject = "Contact The Loft";

$success = mail($EmailTo, $Subject, $Body, $EmailFrom);

当我提交表单时,它会正确发送邮件,但在我的电子邮件中,标题显示不正确。看下图:

我不希望 THEHNOGK@SERVER179.WEB-HOSTING.COM 显示为标题,这就是我通过谷歌搜索并发现我需要自定义标题的原因。所以我做了以下操作,但现在没有发送电子邮件。标题似乎有问题:

<?php
$EmailFrom= "From: HudsonLofts <staff@hobokenhomes.com>\r\n";
$EmailFrom.= "X-Mailer: PHP/" . phpversion()."\r\n";
$EmailFrom.= "MIME-Version: 1.0" . "\r\n";
$EmailFrom.= "Content-type: text/html; charset=iso-8859-1 \r\n";
$EmailTo = "alejo.ferguson@yahoo.com, hunternova01@gmail.com";
$Subject = "Contact The Hudson Loft";

这就是我调用邮件功能的地方:

$success = mail($EmailTo, $Subject, $Body, $EmailFrom);

当我提交表格并检查我的电子邮件帐户时,没有收到电子邮件。

感谢您的帮助。提前致谢

我意识到当我使用 FROM 时:邮件没有发送。此外,邮件功能不起作用,它返回 false。但是我将其删除并仅使用: HudsonLofts 然后它可以工作,但是标题在我的电子邮件中没有正确显示:(

【问题讨论】:

  • 查阅邮件手册php.net/manual/en/function.mail.php 或使用phpmailer/swiftmailer。它会让这变得容易得多。
  • 谢谢我会检查它
  • 顺便说一句,我从问题中删除了“phpmailer”标签,因为您的语法不是“phpmailer”,而是“mail()”,这里有两种不同的动物。
  • 谢谢我没有找到那个,所以我使用 phpmailer 代替人们在看到代码时会注意到它,但是谢谢
  • 这里 $EmailFrom = 'From: HudsonLofts &lt;staff@hobokenhomes.com&gt;' . "\r\n"; 应该可以解决这个问题。可能还有'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 都取自“手册”。

标签: php function email email-headers


【解决方案1】:

http://php.net/manual/function.mail.php
尝试在$EmailFrom 中使用\n 而不是\r\n

顺便说一句:我会将 $EmailFrom 重命名为 $additionalHeaders ;-)

评论后编辑
如果这不起作用,请尝试仅使用这一行作为标题:
$EmailFrom = "MIME-Version: 1.0";

第二个猜测:省略最后一个标题行的\r\n

【讨论】:

  • #1:这应该没什么区别。 #2:“顺便说一句:我会将 $EmailFrom 重命名为 $additionalHeaders” 并具体如何处理?
  • 它不起作用:(当我尝试调用邮件时(收件人、主题、、、等)只返回一个 0 :( 不过谢谢
  • 这实际上取决于 很多 - 电子邮件标题的行终止符的 RFC 规范是 \r\n - 然而 如果您使用的是 Postfix作为邮件服务器,它希望行终止符具有操作系统原生的形式......但实际上,它不太可能破坏任何一种方式。
  • #1:好吧,按照手册的建议... #2:重命名它。我(个人)不会调用变量$EmailFrom,如果它包含类似MIME-Version: 1.0...
  • 我按照 thomas 的建议做了,但没有解决问题 :( 感谢 man
【解决方案2】:
$EmailFrom= "staff@homes.com";
$EmailTo = "alejo@yahoo.com, hunterno1@gmail.com";
$Subject = "Contact The Loft";

$success = mail($EmailTo, $Subject, $Body, $EmailFrom);

$EmailFrom 应该是:

$EmailFrom= "From: staff@homes.com";

或者可能 - 但我还没有检查过 -

$EmailFrom= "From: Staff <staff@homes.com>";

因为the fourth parameter 允许您发送任何 额外的标头,而不仅仅是From:,因此您需要指定完整的标头。

如果仍然不起作用,请注意,某些提供商会重写 From: 标头以防止滥用(例如设置“From: barack.obama@whitehouse.gov”)。如果是这种情况,您将无法覆盖它。但是,如果您与您的提供商交谈,您也许可以向他们清除发件人。

当使用 错误 形式的参数时,一切都“正常”,因为您并没有真正设置任何 From 字段。当您开始这样做时,服务器可能只是将电子邮件丢弃在比特桶中而没有告诉您任何内容; mail() 函数会成功,因为邮件 传递到本地队列。 mail() 不知道,更不用说告诉你,本地队列会看到邮件被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多