Подтвердить что ты не робот

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-сообщении электронной почты.

4b9b3361

Ответ 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']);