【问题标题】:Adding a "from" name in php mail function在 php 邮件函数中添加“发件人”名称
【发布时间】:2016-09-27 02:34:21
【问题描述】:

在以下函数中,$aFrom 变量将“发件人”字段设置为收件人可以回复的电子邮件地址。但是,如果我想添加一个“发件人”名称怎么办。例如,我的电子邮件地址是 johndoe@gmail.com,但是当该人收到电子邮件时,我希望他们看到该电子邮件来自“John Doe”。不过,他们应该仍然可以回复 johndoe@gmail.com。

public static function SendMail_HTML($aFrom, $aTo, $aSubject, $aMessage) {
    $theHeaders =
        'MIME-Version: 1.0' . "\r\n" .
        'Content-type: text/html; charset=UTF-8' . "\r\n" .
        'From: ' . $aFrom . '' . "\r\n" .
        'Reply-To: ' . $aFrom . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($aTo, $aSubject, $aMessage, $theHeaders);

}

【问题讨论】:

标签: php


【解决方案1】:

“发件人”标头可以包含预期收件人的姓名和电子邮件地址。您需要做的就是正确格式化。

变化:

'From: ' . $aFrom . '' . "\r\n" .

进入

'From: John Doe <' . $aFrom . '>' . '' . "\r\n" .

通过将电子邮件地址包装在 字符中。然后,只需将“John Doe”部分替换为正确的名称,直接或使用变量即可。

注意:确保清理您从用户那里接受的任何您计划直接在电子邮件标题中使用的值。

【讨论】:

  • . '' . 是什么?
  • 如何清理电子邮件字段?
  • @Mike,“. '' .” 部分在 op 发布的原始代码中。这不是必需的,可以删除。
  • @VikrantGupta,最重要的是防止任何额外的“\r\n”字符出现在您的标题值中。在 email-header-land 中,“\r\n”(有时只是“\n”)用于分隔标题,因此如果有人恶意尝试输入像 'John Doe' 这样的名称。 "\r\n" 。 '我讨厌的邪恶标题' 。 “\r\n”,他们可能会劫持您的电子邮件并将其发送给他们想要的任何人。这称为标头注入,最好不惜一切代价避免它。我会使用 str_replace(array("\r","\n"), '', $name) 或类似的东西。
【解决方案2】:

你可以试试这个变种。这是新的$aFromName 参数,您可以使用它来将发件人名称传递给您的函数,在这种情况下,接收者会从例如John Doe &lt;john@doe.com&gt; 获取电子邮件。电子邮件客户端仅显示“John Doe”,如果您回复此电子邮件,它将被发送到 john@doe.com

function SendMail_HTML($aFrom, $aTo, $aSubject, $aMessage, $aFromName = '')
{
    $aFrom = $aFromName === '' ? $aFrom : "$aFromName <$aFrom>";
    $theHeaders =
      'MIME-Version: 1.0' . "\r\n" .
      'Content-type: text/html; charset=UTF-8' . "\r\n" .
      'From: ' . $aFrom . '' . "\r\n" .
      'Reply-To: ' . $aFrom . "\r\n" .
      'X-Mailer: PHP/' . phpversion();
    mail($aTo, $aSubject, $aMessage, $theHeaders);
}

【讨论】:

  • 为什么 OP 应该尝试这个变体?它有什么不同?添加一些文字来解释您所做的事情。
猜你喜欢
  • 2017-10-19
  • 2012-05-31
  • 2011-10-07
  • 1970-01-01
  • 2013-05-21
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多