точка(.)s отсутствуют здесь и там в почтовом html при отправке писем PEAR Mail Mime
Я отправляю письмо, используя пакеты 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('xxx@example.com',$sendStart['mime']->headers($sendStart['headers']),$body);
Я столкнулся со странной проблемой при отправке писем через этот код. У меня есть изображения внутри тела электронной почты, иногда изображения не отображаются. Когда я отлаживал проблему, я обнаружил, что .
отсутствует в url-адресе изображения. Но если я печатаю письмо непосредственно перед строкой отправки (как я комментирую в коде), оно печатается с изображением идеально.
Правильный url-адрес изображения: http://www.domain.com/image.png
По почте : http://www.domaincom/image.png
или http://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, но не в других клиентах, так как для outlook у меня есть отдельный код(согласно коду).
Есть ли у кого-нибудь идеи, как отладить проблему или какие-либо комментарии по этой проблеме.
Отредактировано:
Эта проблема не имеет ничего общего с каким-либо конкретным тегом (хотя я объясняю это используя тег image), я испытываю его в нескольких местах, таких как стили.
Пример: line-heigth:1.5;
является оригиналом и изменяется на line-heigth:15;
при отправке.
В основном это просто удалить .
здесь и там в HTML электронной почты.
3 ответа:
Я почти уверен, что это вызвано точечной начинкой; поскольку точка используется в качестве специального индикатора в электронных письмах. Вы можете прочитать об этом в rfc , где говорится (курсив добавлен):
Чтобы обеспечить прозрачную передачу всего пользовательского текста, используются следующие процедуры:
- перед отправкой строки почтового текста SMTP-клиент проверяет первый символ строки. Если это период, то в начале строки вставляется один дополнительный период. линия.
- когда строка почтового текста принимается SMTP-сервером, он проверяет эту строку. Если линия состоит из одного периода,она рассматривается как конец почтового индикатора. Если первый символ-точка и в строке есть другие символы, первый символ удаляется.
Похоже, что клиент, который вы используете для составления этих писем, не реализует первую процедуру , в то время как сервер, на который он отправляет почту, не выполняет первую процедуру. реализует его, что приводит к исчезновению точек.
Исправление состояло бы в том, чтобы заставить вашего клиента реализовать заполнение.
Вот пример этого -
// Set up the headers that will be included in the email. $recipient = 'someemail@gmail.com'; $from = 'someemail1@gmail.com'; $headers = array( 'To' => $recipient, 'From' => $from, 'Return-Path' => $from, 'Reply-To' => $replyto, //based on your need 'Subject' => $subject, 'Errors-To' => '<<a href="mailto:errors@example.com">errors@example.com</a>>', 'MIME-Version' => '1.0', ); // Set up parameters for both the HTML and plain text mime parts. $textparams = array( 'charset' => 'utf-8', 'content_type' => 'text/plain', 'encoding' => 'quoted/printable', ); $htmlparams = array( 'charset' => 'utf-8', 'content_type' => 'text/html', 'encoding' => 'quoted/printable', ); // Create the email itself. The content is blank for now. $email = new Mail_mimePart('', array('content_type' => 'multipart/alternative')); // Add the text and HTML versions as parts within the main email. $textmime = $email->addSubPart($textbody, $textparams); $htmlmime = $email->addSubPart($htmlbody, $htmlparams); // Get back the body and headers from the MIME object. Merge the headers with // the ones we defined earlier. $final = $email->encode(); $final['headers'] = array_merge($final['headers'], $headers); // Perform the actual send. $smtp_params = array(); $smtp_params['host'] = '127.0.0.1'; $smtp_params['port'] = '25'; $smtp_params['persist'] = TRUE; $mail =& Mail::factory('smtp', $smtp_params); $status = $mail->send($recipient, $final['headers'], $final['body']);