Я отправляю почту с помощью почтовых сообщений PEAR и пакетов 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://img.ruphp.com/php/
по почте: http://img.ruphp.com/php/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://img.ruphp.com/php/" 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://img.ruphp.com/php/" 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 я имею отдельный код (в соответствии с кодом).
Кто-нибудь знает, как отладить проблему или какие-либо комментарии по этой проблеме.
Отредактировано:
Эта проблема не имеет никакого отношения к какому-либо конкретному тегу (хотя я объясняю его с помощью тега изображения), я испытываю его в нескольких местах, например, в стилях.
пример: line-heigth:1.5;
является оригиналом, и он меняется на line-heigth:15;
при отправке.
В основном это просто удалить .
здесь и там по электронной почте HTML.
Я уверен, что это вызвано заполнением точек; поскольку точка используется как специальный индикатор в электронных письмах. Вы можете прочитать об этом в rfc, где говорится (выделено мной):
Чтобы прозрачный прозрачный текст, написанный пользователем, был использован следующим образом:
- Перед отправкой строки текста почты клиент SMTP проверяет первый символ строки. Если это период, в начале строки вставляется один дополнительный период.
- Когда строка почтового текста получает SMTP-сервер, он проверяет строку. Если строка состоит из одного периода, она рассматривается как индикатор конца почты. Если первый символ является периодом и на линии есть другие символы, первый символ удаляется.
Кажется, что клиент, которого вы используете для составления этих писем, не выполняет первую процедуру, а сервер, на который он отправляет почту , выполняет ее; что приводит к исчезновению точек.
Исправление будет заключаться в том, чтобы ваш клиент реализовал дополнение.
Используйте PHPMailer, это облегчит жизнь.
Вот пример этого –
// 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']);