在 phpmailer 的一个非常基本的实现中有一个奇怪的错误,其中主题行添加了两次,它只在代码中添加了一次:
$mailer->Subject = "My Subject";
$mailer->Send();
输出是它收到了邮件,但主题行在电子邮件客户端中出现了两次。它非常奇怪,并且之前没有在代码中设置。
有人看到此错误并找到解决方法吗?
我解决了这个问题。有一个名为 SingleTo 的属性,需要将其设置为 true。 http://phpmailer.worxware.com/index.php?pg=properties
$mail->SingleTo = true;
它应该可以正常工作。
我知道这很旧,但我找到了解决方案:
phpmailer 将 $subject 和收件人添加到 create_header 函数中的 $headers 中,但是当您使用默认发送方法 - php mail - 它会再次添加它们。邮件($to, $this->Subject, $body, $header)
要解决这个问题,只需在 phpmailer 的 create_header 函数中注释掉这些行。
//$header[] = $this->addr_append("To", $this->to);
//$header[] = sprintf("Subject: %s\n", trim($this->Subject));
PHPMailer 的 ->$Subject 属性只是一个变量。分配一个新值不会将其附加到前一个值,它会覆盖并替换任何以前的主题。除非你使用类似的东西:
$mail->Subject .= 'extra subject bits';
or
$mail->Subject = $mail->Subject . 'extra subject bits';
那么您将不得不在其他地方寻找原因。可能您的邮件服务器配置中存在错误,或者您已将 PHPMailer 子类化,而您的超类正在做一些时髦的事情。
您可以通过将相同的电子邮件发送到由不同服务器处理的多个帐户来检查是否是接收服务器的问题。->AddBCC、->AddCC 和 ->AddAddress 多次会解决这个问题。只要确保地址由不同的服务器处理。
您是否尝试过在多个客户端中查看电子邮件?似乎您的主题可能包含在标题中,或者您的电子邮件客户端可能出于某种原因将其显示两次。也许作为电子邮件的标题?
就我个人而言,我从未见过或听说过这种性质的错误。
PHPMailer 6.0.3 也有类似的问题。
发送的电子邮件带有重复的“主题”标题条目,导致电子邮件从@yahoo、@sky.com 和@rocketmail.com 收件人退回。尽管如此,电子邮件仍被 Hotmail 和 GMail 接受。
在 /PHPMailer6/PHPMailer.php 中,注释掉第 2299 - 2301 行解决了这个问题。
/*if ('mail' != $this->Mailer) {
$result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
}*/
在其他地方,我使用 PHPMailer 发送邮件,是典型的代码示例