точка(.)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 13

3 ответа:

Я почти уверен, что это вызвано точечной начинкой; поскольку точка используется в качестве специального индикатора в электронных письмах. Вы можете прочитать об этом в 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']);