PHPMailer每隔75个字符插入'='等号

时间:2015-11-18 18:37:34

标签: php phpmailer

使用PHPMailer 5.2.14,电子邮件以text / html发送。传出的文本每隔75个字符散布着相同的符号。

我尝试使用EOL workaround,但它没有删除额外的等号:

$email = new PHPMailer();
$email->From      = 'from@example.com';
$email->FromName  = 'FromUser';
$email->AddAddress( 'to@example.com' );
$email->Subject   = 'This is a test';
$email->IsHTML(true);
$email->Body = "<p>This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; </p>";

// fix EOL here? 
$email->LE = PHP_EOL;

$email->Send();

收到后产生的来源:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><font face="arial"><base href="http://example.com/"><!-- </base> -->=
<p>This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This i=
s a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.=
&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; Th=
is is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a t=
est.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp;=
 </p></font>

在Outlook中查看时出现等号。当我将相同的文本/ html发送到Gmail帐户时,不存在等号。

使用Outlook为收件人消除这些迷路等号需要做些什么?

7 个答案:

答案 0 :(得分:6)

我在PHPMailer中遇到了与html-emails相同的问题。我测试过不同的东西并发现:

  • 如果邮件有特殊长度,则会出现问题 - 在我的情况下&gt;一行中有1002个字母(当我删除了一些字母(与哪些字母不相关)时,电子邮件是正确的)
  • 问题仅在某些电子邮件程序中可见(例如MS Outlook,网站t-online.de;没有雅虎问题)
  • 我测试PHPMailer 5.2.7 - 5.2.14:PHPMailer中存在问题&gt; 5.2.10(PHPMailer 5.2.7 - 5.2.10中没有问题)
  • 解决方案,例如&#39; $ mail-&gt;编码=&#34; 7bit&#34 ;;&#39;或者&#39; $ mail-&gt; LE = PHP_EOL;&#39;没有为我工作
  • 通过isSmtp()发送电子邮件时没有问题。
  • 在两个不同的服务器上测试:服务器1包含相同的标志,服务器2不包含这些标志但是有错误的换行符 - 两个服务器上的php配置几乎相同&gt;它似乎不是一个php问题

所以对我来说,解决方案是#34;采用PHPMailer 5.2.10&#34;直到他们在更新的版本中解决问题 - 没有好的解决方案,但它对我有用,直到找到更好的一个; - )

答案 1 :(得分:5)

这是您的文档应该是什么样的:

<!DOCTYPE html>
<head>
   meta stuff and <base href...>
</head>
    <body>
    HTML stuff
    </body>
</html>

除此之外的所有内容都不符合HTML,会对你的一天产生影响。

我可以看到,您的meta属于<head>并且<font>标签属于<body>等。如果没有正确的HTML文档结构化,那么肯定会抱怨。包括有效的doctype。

关于<font>标签的快速旁注;它已被弃用。

您可以使用内联CSS样式。不要使用<style>标签,因为大多数电子邮件客户端会将其丢弃并忽略它。

答案 2 :(得分:3)

这称为quoted-printable encoding,在电子邮件中非常常见。等号用作转义字符,行长度限制为76个字符。如果Outlook无法识别这一点,您可能必须手动设置标题,告诉它以这种方式编码。

答案 3 :(得分:0)

使用'$mail->Encoding = 'base64';它现在适用于v5.2.17。 希望这最终在v6中得到修复。

答案 4 :(得分:0)

通过添加$ email-> crlf =“ \ r \ n”; 您可以解决此问题。

答案 5 :(得分:0)

我正在使用phpMailer 5.2.25并通过SendPulse网关发送。直接通过我的ISP使用SMTP没问题,但是恰好在一行的75个字符之后看到了'='符号-因此它与行长换行有关。设置$ mail-> Encoding ='base64';按照asdfklgash的回答,防止插入等号(已通过A / B比较证明)。

答案 6 :(得分:-1)

$email = new PHPMailer();
$email->From      = 'from@example.com';
$email->FromName  = 'FromUser';
$email->AddAddress( 'to@example.com' );
$email->Subject   = 'This is a test';
$email->IsHTML(true);
$email->Body = "<p>This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&`enter code here`nbsp; This is a test.&nbsp; This is a test.&nbsp; This is a test.&nbsp; </p>";

// fix EOL here? 
$email->LE = PHP_EOL;

$email->Send();