【问题标题】:Change the sender name php mail instead of sitename@hostname.com更改发件人名称 php mail 而不是 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

【问题讨论】:

  • 您可能想要研究标头注入攻击。您的代码并非直接易受攻击,但请务必小心。

标签: php email email-headers


【解决方案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 用户覆盖

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-07
          • 2011-04-30
          • 1970-01-01
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-21
          • 2014-04-18
          相关资源
          最近更新 更多