PHPmailer 自定义 header 设置,但未在交付时显示
PHPmailer custom header set, but not shown on delivery
我正在使用 PHPMailer6.2.0,我在设置 return 路径时遇到问题。
我已经通过 PHPmailer 函数 addCustomHeader()
添加了自定义 header
$mail->addCustomHeader("Return-Path", $fromemail);
为了调试,我在第 1794 行的 \PHPMailer\PHPMailer.php 函数 mailSend($header, $body)
中打印了 header 内容;
var_export($header);
die();
这会在发送之前打印出 header 内容,并验证自定义 header return-path 设置是否正确,但是实际上,当我收到一封电子邮件到我的展望,header return 路径回调到域默认电子邮件 user@domain.com。也许这不是发送电子邮件之前的最后一个地方,稍后会丢失?
我正在使用 DirectAdmin 作为我的服务器管理器
你在mailSend函数中看到上面的评论了吗?
发件人被收件人变成了 return-path header!
<?php
$params = null;
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
//A space after `-f` is optional, but there is a long history of its presence
//causing problems, so we don't use one
//Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
//Example problem: https://www.drupal.org/node/1057954
// CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
$params = sprintf('-f%s', $this->Sender);
}
我认为您不应该自己设置 return-path header。我相信 PHPMailer 使用发件人来自动处理这个问题。但如果我错了请纠正我。
停在那里!发件人应该不设置return-path
header。 header 由 接收者 添加,其中的内容取决于 SMTP 信封发件人,即在发送的 SMTP MAIL FROM
命令中使用的地址消息。将此 header 设置为发件人是对 RFC 的直接违反。那么你应该怎么做呢?设置信封发件人,在 PHPMailer 中,您可以这样做:
$mail->Sender = $fromemail;
即使您这样做了,您发送的服务器是否接受它也是另一回事。例如,gmail 将不允许您使用除您的帐户用户名地址或预定义别名以外的任何地址,而不是任意地址。
我正在使用 PHPMailer6.2.0,我在设置 return 路径时遇到问题。
我已经通过 PHPmailer 函数 addCustomHeader()
添加了自定义 header$mail->addCustomHeader("Return-Path", $fromemail);
为了调试,我在第 1794 行的 \PHPMailer\PHPMailer.php 函数 mailSend($header, $body)
中打印了 header 内容;
var_export($header);
die();
这会在发送之前打印出 header 内容,并验证自定义 header return-path 设置是否正确,但是实际上,当我收到一封电子邮件到我的展望,header return 路径回调到域默认电子邮件 user@domain.com。也许这不是发送电子邮件之前的最后一个地方,稍后会丢失?
我正在使用 DirectAdmin 作为我的服务器管理器
你在mailSend函数中看到上面的评论了吗? 发件人被收件人变成了 return-path header!
<?php
$params = null;
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
//A space after `-f` is optional, but there is a long history of its presence
//causing problems, so we don't use one
//Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
//Example problem: https://www.drupal.org/node/1057954
// CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {
$params = sprintf('-f%s', $this->Sender);
}
我认为您不应该自己设置 return-path header。我相信 PHPMailer 使用发件人来自动处理这个问题。但如果我错了请纠正我。
停在那里!发件人应该不设置return-path
header。 header 由 接收者 添加,其中的内容取决于 SMTP 信封发件人,即在发送的 SMTP MAIL FROM
命令中使用的地址消息。将此 header 设置为发件人是对 RFC 的直接违反。那么你应该怎么做呢?设置信封发件人,在 PHPMailer 中,您可以这样做:
$mail->Sender = $fromemail;
即使您这样做了,您发送的服务器是否接受它也是另一回事。例如,gmail 将不允许您使用除您的帐户用户名地址或预定义别名以外的任何地址,而不是任意地址。