发送PEAR Mail_Mime电子邮件时,邮件html中的点(。)丢失了 - php

我使用PEAR的mail和mail_mime包以及示例代码发送邮件,如下所示:

$sendStart=array();
require_once('Mail.php');
require_once('Mail/mime.php');

$sendStart['mail'] =& Mail::factory('mail');
$sendStart['mime'] = new Mail_mime("\n");

$sendStart['mime']->setHTMLBody($html);
$sendStart['headers']['Subject']=$title;
$sendStart['headers']['X-SMTPAPI']='{"category": ["MailID-XXX"]}';

$body=$sendStart['mime']->get(array(
        'html_charset'=>'UTF-8',
        'text_charset'=>'UTF-8',
        'head_charset'=>'UTF-8'
    ));

//echo ($sendStart['mime']->_htmlbody); exit;
$sendStart['mail']->send('[email protected]',$sendStart['mime']->headers($sendStart['headers']),$body);

通过此代码发送邮件时遇到一个奇怪的问题。我在电子邮件正文中有图像,有时图像不显示。当我调试问题时,我发现图像URL中缺少.。但是,如果我只是在发送行之前打印邮件(正如我在代码中注释掉的那样),它将完美地打印图像。

正确的图片网址:http://www.domain.com/image.png

在邮件中:http://www.domaincom/image.pnghttp://www.domain.com/imagepng ...等

HTML代码的一部分,其图像如下:

<table cellpadding="0" cellspacing="0" border="0" class="image-table image-2" align="center" style="float:none;margin-left:auto;margin-right:auto;text-align:left;">
    <tbody>
      <tr>
        <td class="element" style="text-align: left;height: auto;overflow: hidden;-webkit-text-size-adjust: none;">
          <!--[if gte mso 9]><img alt="Placeholder Image" src="http://www.domain.com/image.png" style="outline: none; text-decoration: none; display: block; clear: none; float: none;    margin-left: auto; margin-right: auto;display:none; mso-hide: none;" align="center" width="394"><![endif]--><![if !mso]><!-- --><img alt="Placeholder Image" src="http://www.domain.com/image.png" style="outline: none;text-decoration: none;display: block;clear: none;float: none;width: 100%;height: auto;max-width: 394px;margin-left: auto;margin-right: auto;*width: 394px;-ms-interpolation-mode: bicubic;" align="center"><!--<![endif]-->
        </td>
      </tr>
    </tbody>
</table>

而且非常奇怪的是,它在Outlook中正确显示,但在其他客户端中却不能正常显示,因为我有单独的代码(根据代码)。

是否有人知道如何调试问题或对此问题有任何评论。

编辑:

这个问题与任何特定的标签都没有关系(尽管我使用image标签对其进行了解释),但我在多个地方(例如样式)都遇到了这种问题。

示例:line-heigth:1.5;是原始文件,发送时更改为line-heigth:15;

基本上,只需在电子邮件HTML中的此处和此处删除.

参考方案

我很确定这是由点填充引起的;因为该点用作电子邮件中的特殊指示符。您可以在the rfc中说到此(强调):

为了透明地传输所有用户撰写的文本,请使用以下过程:

在发送一行邮件文本之前,SMTP客户端会检查该行的第一个字符。如果是一个周期,则在该行的开头插入一个附加的周期。
当SMTP服务器收到一行邮件文本时,它将检查该行。如果该行由单个句点组成,则将其视为邮件结束指示符。如果第一个字符是句点,并且该行上还有其他字符,则删除第一个字符。

您用来撰写这些电子邮件的客户端似乎没有实现第一个过程,而发送邮件的服务器却实现了第一个过程。导致点消失。

解决方法是使您的客户端实现填充。

PHP:检查谁看过发送的电子邮件? - php

我正在向某些用户发送电子邮件,并且想知道是谁阅读的,这意味着如果有人阅读了该电子邮件,则将维护一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/ IP。为此,我发送一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它仅会警告用户的电子邮件地址,例如:for($n=0; $n<sizeof($checkBox);…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

更改默认的URL PHP - php

如何更改默认网址。例如www.example.com/index.php-> www.example.com现在,我要将其设置为www.example.com/test.php。我应该在php.ini中进行更改吗? 参考方案 假设您正在使用apache,则可以通过DirectoryIndex指令执行此操作。Check out the docs。