Dot (.) 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('[email protected]',$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 я имею отдельный код (в соответствии с кодом).
Кто-нибудь знает, как отладить проблему или какие-либо комментарии по этой проблеме.
Отредактировано:
Эта проблема не имеет никакого отношения к какому-либо конкретному тегу (хотя я объясняю его с помощью тега изображения), я испытываю его в нескольких местах, например, в стилях.
example: line-heigth:1.5;
является оригиналом, и при отправке он изменяется на line-heigth:15;
.
В основном он просто удаляет .
здесь и там в HTML-сообщении электронной почты.
Ответы
Ответ 1
Я уверен, что это вызвано заполнением точек; поскольку точка используется как специальный индикатор в электронных письмах. Вы можете прочитать об этом в rfc, где говорится (выделено мной):
Чтобы разрешить передачу текста, содержащего весь пользовательский текст, прозрачно, используются следующие процедуры:
- Перед отправкой строки текста почты клиент SMTP проверяет первый символ строки. Если это период, в начале строки вставлен еще один период.
- Когда на почтовый сервер SMTP получен текст строки, он проверяет строку. Если строка состоит из одного периода, она рассматривается как индикатор конца почты. Если первый символ является периодом и в строке есть другие символы, первый символ удаляется.
Кажется, что клиент, который вы используете для составления этих писем, не реализует первую процедуру, а сервер, на который он отправляет почту, выполняет; что приводит к исчезновению точек.
Исправление будет заключаться в том, чтобы ваш клиент реализовал дополнение.
Ответ 2
Используйте PHPMailer, это облегчит жизнь.
Ответ 3
Вот пример этого -
// Set up the headers that will be included in the email.
$recipient = '[email protected]';
$from = '[email protected]';
$headers = array(
'To' => $recipient,
'From' => $from,
'Return-Path' => $from,
'Reply-To' => $replyto, //based on your need
'Subject' => $subject,
'Errors-To' => '<<a href="mailto:[email protected]">[email protected]</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']);