更改发件人名称 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 无法使用名称和电子邮件设置发件人
在 javax.mail.MimeMessage 中设置发件人名称?