如何在简单的php邮件脚本中仅显示名称而不是发件人的电子邮件地址

时间:2015-09-14 09:09:51

标签: php email phpmailer

我有一个简单的php邮件脚本,可以发送电子邮件。

问题在于发送时显示sendername <senderemail@domain.com>

我在代码中给出了$headers = "From: $name <$senderEmail>";

我只想显示发件人的姓名而不是电子邮件地址。

我该怎么做?

这是整个计划。

<?php

if($_POST["submit"]) {
    $recipient=$_POST["senderemail"];
    $subject=$_POST["subject"];
    $name=$_POST["name"];
    $senderEmail=$_POST["email"];
    $city=$_POST["city"];
    $headers = "From: $name <$senderEmail>";
    $mailBody="$city\n";
    $process=explode(",",$recipient);
    reset($process);

    foreach ($process as $to) {
        mail($to,$subject, $mailBody,$headers);
    }

    $thankYou="<p>Thank you! Your Message has been sent.</p>";
    echo 'Thank you! Your Message has been sent.';
}
?>

2 个答案:

答案 0 :(得分:2)

您生成的消息似乎已在From:标头中包含用户的全名(假设$name是人类可读的名称)。任何单个用户代理如何显示它不再在您手中。很多时候,它会显示两个部分;如果发件人的电子邮件地址在收件人的地址簿中,则只能缩短人类可读的名称。 (Thunderbird更进了一步,显示了来自地址簿的信息,而不是消息中的实际信息!)

一个常见问题是生成的消息是否有不同的Sender:标头;通常,这将使收件人的用户代理显示的不仅仅是通常的全名。您的问题没有提到这一点,也没有显示生成的消息之一;但也许这会帮助你找到解决方案。

答案 1 :(得分:1)

包含名称和地址的From标头应格式如下:

From: User Name <user@example.com>

如果您未提供姓名,则会显示电子邮件地址。

PHPMailer内置支持通过FromFromName属性以及setFrom方法(与您使用的无关)为您正确创建此标头:

$mail->setFrom('user@example/com', 'User Name');

$mail->From = 'user@example/com';
$mail->FromName = 'User Name';