Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dot(.)s are missing here & there in the mail html while sending PEAR Mail_Mime emails

Tags:

php

email

mime

pear

I am sending a mail using PEAR's mail and mail_mime packages and sample code as below:

$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);

I am facing a strange issue while sending the mails through this code. I have images inside the email body, sometimes the images not displaying. When I debug the issue, I found that . is missing in the image url. But if I print the mail just before the send line (as I comment out in the code) it prints with the image perfectly.

correct image url: http://www.domain.com/image.png

in the mail : http://www.domaincom/image.png or http://www.domain.com/imagepng ... etc.

part of the HTML code which has the image as below:

<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>

And the very strange thing is it is displaying properly in outlook but not in other clients as for outlook I have separate code(as per the code).

Does anybody have any idea how to debug the issue or any comment on this issue.

Edited:

This issue is nothing to do with any specific tag (although I explain it using image tag), I experience it in several places such as in styles.

example : line-heigth:1.5; is the original and it changes to line-heigth:15; while sending out.

Basically it just remove the . here & there in the email HTML.

like image 360
Janith Chinthana Avatar asked Jul 05 '15 05:07

Janith Chinthana


2 Answers

I'm pretty sure this is caused by dot-stuffing; as the dot is used as a special indicator in emails. You can read about this in the rfc where it says (emphasis added):

To allow all user composed text to be transmitted transparently, the following procedures are used:

  • Before sending a line of mail text, the SMTP client checks the first character of the line. If it is a period, one additional period is inserted at the beginning of the line.
  • When a line of mail text is received by the SMTP server, it checks the line. If the line is composed of a single period, it is treated as the end of mail indicator. If the first character is a period and there are other characters on the line, the first character is deleted.

It seems the client you're using to compose these emails does not implement the first procedure, while the server it sends the mail to does implement it; leading to dots disappearing.

The fix would be to make your client implement the padding.

like image 133
Sjon Avatar answered Oct 25 '22 08:10

Sjon


Use PHPMailer, it will make life a lot easier.

like image 32
CommonKnowledge Avatar answered Oct 25 '22 07:10

CommonKnowledge