【问题标题】:PHP sendmail from address showing incorrectly来自地址的 PHP sendmail 显示不正确
【发布时间】:2026-01-23 05:00:02
【问题描述】:

我知道我在这里做了一些愚蠢的事情,但我想不通。我正在使用以下方式发送电子邮件:

    $headers  = "MIME-Version: 1.0
    From: ".$from_email."
    Bcc: ".$bcc_email."
    ";
    mail($email, $message['subject'], $message['content'], $headers);

在哪里$from_email = 'no-reply@mydomain.com'

该邮件的发件人地址错误。完整的标题如下:

 Return-path: <cli@hostxxx.com>
Envelope-to: xxx@email.com
Delivery-date: Tue, 20 Nov 2012 11:01:34 -0500
Received: from cli by cli@hostxxx.com with local (Exim 4.69)
    (envelope-from <cli@hostxxx.com>)
    id 1TaqGI-000232-IJ
    for xxx@email.com; Tue, 20 Nov 2012 11:01:26 -0500
To: xxx@email.com
Subject: Fairway Solutions - Your new password
MIME-Version: 1.0
        From: no-reply@mydomain.com
        Bcc: support@mydomain.com
Message-Id: <E1TaqGI-000232-IJ@host.com>
From: cli@hostxxx.com
Date: Tue, 20 Nov 2012 11:01:22 -0500

令人讨厌的是,我可以看到 From 正确通过,但就像收到的内容被主机信息覆盖一样。我错过了服务器级别的东西吗?

我也尝试在 php.ini 文件 (ini_set(sendmail_from,no-reply@mydomain.com);) 中设置它,但没有任何区别。

ta

【问题讨论】:

标签: php sendmail


【解决方案1】:

您可以尝试添加额外的标头,例如 X-Sender:

$headers = 'Content-type: text/html; charset=iso-8859-1' . "\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= "From: $sender<" . $sender . ">" . "\r\n";
$headers .= "X-Sender: $sender<" . $sender . ">" . "\n";
$headers .= "X-Mailer: PHP " . phpversion() . "\n";
$headers .= "X-Priority: 3" . "\n";
$headers .= "X-Sender-IP: " . $_SERVER['REMOTE_ADDR'] . "\n";
$headers .= "Return-Path: $sender<" . $sender . ">" . "\r\n";
$headers .= "Reply-To: $sender<" . $sender . ">" . "\r\n"; 

【讨论】:

  • 现在正在尝试。愚蠢的问题:是否有理由将$headers 分隔到不同的行?我问是因为我在邮件客户端上正确读取\r\n 的成功率是 50/50
  • 我认为邮件客户端解析电子邮件的方式确实有所不同,但我真的不知道。这是 php.net 显示他们的示例代码的方式。
  • 谢谢。添加额外的标头已经起作用,尽管它仍然在标头中接收到的信息中显示主机名,但它不再覆盖 from。 ta
  • 您可能需要修改标题以获得所需的内容
  • 旁注:添加Content-type: text/html; charset=iso-8859-1 标头会影响正文布局并删除我的换行符和格式。仍然按原样处理其他所有事情,所以我们很好 - 以防万一其他人发生这种情况:D