更改发件人名称 php mail 而不是 sitename@hostname.com

Posted

技术标签:

【中文标题】更改发件人名称 php mail 而不是 sitename@hostname.com【英文标题】:Change the sender name php mail instead of sitename@hostname.com 【发布时间】:2012-01-12 00:55:53 【问题描述】:

我正在尝试从我的 php 发送电子邮件:

$to = 'it@7sisters.in';
    $email_from = "info@7sisters.in";

    $full_name = 'Suraj Hazarika';
    $from_mail = $full_name.'<'.$email_from.'>';



    $subject = "testing sender name";
    $message = "";
    $message .= '
            <p><strong>This is only a test . Please do not reply.</strong><br />
    ';
    $from = $from_mail;

    $headers = "" .
               "Reply-To:" . $from . "\r\n" .
               "X-Mailer: PHP/" . phpversion();
    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";        
    mail($to,$subject,$message,$headers);

我正在关注教程PHP E-mail Form Sender Name Instead Of E-mail?,但我仍然收到带有发件人名称和主机名的电子邮件。

     From                              Date             Subject 
sisters@rsx02.justhost.com  Fri, 11:24 pm       testing sender name
sisters@rsx02.justhost.com  Fri, 11:24 pm       testing sender name

【问题讨论】:

您可能想要研究标头注入攻击。您的代码并非直接易受攻击,但请务必小心。 【参考方案1】:

我来这个问题是为了寻找不同但有相似词的东西,所以这里是如何做我正在寻找的东西:

from 标头中,将地址放在尖括号中,将“发件人姓名”放在括号外。

from: Don Draper <don.draper@website.com>\n

我希望收件箱显示 Don Draper 而不是 don.draper,这就是这样做的方法。

【讨论】:

【参考方案2】:

您只能在 Reply-To 标头中使用 $from。如果你想让它在From header 中,你需要在From header 中设置它。

在您的 mail() 命令之前添加这样的内容:

$headers .= 'From: ' . $from . "\r\n";

【讨论】:

值得注意的是这里设置的From地址与“信封发件人”地址不同。为了防止电子邮件无法送达,值得同时设置。【参考方案3】:

在标题行之前添加这一行

$headers .= "From: Your Name <sitename@hostname.com> \r\n";

所以代码是

$headers = "";
$headers .= "From: WIFI Metropolis <sitename@hostname.com> \r\n";
$headers .= "Reply-To:" . $from . "\r\n" ."X-Mailer: PHP/" . phpversion();
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";        
mail($to,$subject,$message,$headers);

【讨论】:

【参考方案4】:

您也可以尝试使用 PHP 的 mail() 函数中的第五个参数将 From 地址添加到邮件的“信封”中:

mail($to_mail, $subject, $message, $headers, "-f$from_email");

参考here。

关于邮件标题和信封的参考here

请注意,某些服务器设置可能不允许这样做或发出警告,具体取决于它们的配置和/或邮件传输代理的配置。 This answer 谈到更新 sendmail 的“受信任用户”。

【讨论】:

它没有强制任何东西,From: 标头设置 MIME 发件人,而 -f 附加参数设置信封发件人。这在安全模式下是不允许的。 @LeonardChallis 非常正确;我没有完全理解标题和信封之间的区别。我已经用(希望)更好、更清晰的解释和参考更新了我的答案。【参考方案5】:

只需添加 From 标题。像这样的。

$headers .= "From: website@mydomainname.com";

【讨论】:

【参考方案6】:

尝试在标题中添加From:

$headers = "" .
           "Reply-To:" . $from . "\r\n" .
           "From:" . $from . "\r\n" .
           "X-Mailer: PHP/" . phpversion();
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

某些 MTA 可以更改/忽略此定义以避免垃圾邮件,并使用 PHP.ini 中配置的 SMTP 用户覆盖

【讨论】:

以上是关于更改发件人名称 php mail 而不是 sitename@hostname.com的主要内容,如果未能解决你的问题,请参考以下文章

PHP PEAR send_mail 无法使用名称和电子邮件设置发件人

php 在传出的WordPress电子邮件中更改发件人名称

在 javax.mail.MimeMessage 中设置发件人名称?

Flask Mail:如何为发件人添加自定义名称?

无法在 laravel 5.2 中发送没有发件人地址的消息我已经设置了 .env 和 mail.php

通过 smtp 发送电子邮件并更改发件人姓名