2015-07-05 3 views
13

Я посылаю почту с помощью PEAR по почте и mail_mime пакетов и пример кода, как показано ниже:точка s здесь и там не хватает в почтовом HTML при отправке 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('[email protected]',$sendStart['mime']->headers($sendStart['headers']),$body); 

Я столкнулся с странная проблема при отправке писем через этот код. У меня есть изображения внутри тела электронной почты, иногда изображения не отображаются. Когда я отлаживаю проблему, я обнаружил, что в изображении отсутствует .. Но если я печатаю почту непосредственно перед линией отправки (как я комментирую код), она отлично печатает изображение.

правильный 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 я имею отдельный код (в соответствии с кодом).

Кто-нибудь знает, как отладить проблему или какие-либо комментарии по этой проблеме.

Отредактировано:

Этот вопрос не имеет ничего общего с какой-либо конкретной метке (хотя я это объяснить с помощью тега изображения), я переживаю его в нескольких местах, например, в стилях.

пример: line-heigth:1.5; оригинал и изменение line-heigth:15; при отправке.

В основном это просто удаляет . здесь & там в письме HTML.

+0

Какие значения '$ html' и' $ body'? –

+0

на самом деле его немного большой шаблон html, который я не могу задать внутри вопроса, хотя я отредактирую его с соответствующей частью изображения, @DaveChen, пожалуйста, проверьте отредактированный вопрос –

+0

Интересно ... вы отправляете разные письма для MS-Outlook? Как вы знаете заранее, какой приемник использует какой почтовый клиент? – arkascha

ответ

6

Я уверен, что это вызвано набивкой точек; поскольку точка используется как специальный индикатор в электронных письмах. Вы можете прочитать об этом в the rfc, где он говорит (курсив наш):

Чтобы разрешить все состоит пользователь текст, который будет передаваться прозрачно, используются следующие процедуры:

  • Перед отправкой строки почты текст, клиент SMTP проверяет первый символ строки. Если это период, в начале строки вставляется один дополнительный период.
  • Когда строка текста почты получен SMTP-сервером, она проверяет строку. Если строка состоит из одного периода, она рассматривается как индикатор конца почты. Если первый символ является периодом, и на линии есть другие символы, первый символ удаляется.

Кажется, клиент вы используете, чтобы составить эти письма делает не реализации первой процедуры, в то время как сервер отправляет почту в делает его реализации; что приводит к исчезновению точек.

Исправить будет то, что ваш клиент реализует прокладку.

2

Использование PHPMailer, это сделает жизнь намного проще.

+0

Я не могу изменить систему электронной почты по некоторым причинам. но спасибо за предложение. –

0

Вот пример этого -

 // 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']); 

 Смежные вопросы

  • Нет связанных вопросов^_^