Встроенное изображение в HTML-почту показывает прикрепленный вместо в шаблоне - PullRequest
1 голос
/ 08 февраля 2011

Я отправляю письма в формате HTML с помощью swiftmailer. Все это работает довольно хорошо, мои HTML-письма хорошо отображаются во всех клиентах. У меня есть достаточно знаний по созданию шаблонов электронной почты. Отправляю их себе не так много ...

Проблема существует в gmail и hotmail. Изображение не отображается. Например, в Thunderbird все хорошо ... gmail оставляет мое изображение пустым и добавляет его в качестве вложения (внизу письма, как будто я отправляю фотографии с дня рождения ...).

Есть идеи?

У меня есть следующий код:

function deliverMail($subject, $data, $from, $to, $template){
    if($_SERVER['SERVER_ADDR'] !== '::1'){

        if (!is_array($to)){
            $to = array($to);       
        }           
        $from = explode(",", $from);        

        //Create the Transport
        $transport = Swift_SmtpTransport::newInstance('mail.xxx.nl', 25)
          ->setUsername('xxx')
          ->setPassword('xxx');           

        $mailer = Swift_Mailer::newInstance($transport);
        $message = Swift_Message::newInstance($subject);
        $image = $message->embed(Swift_Image::fromPath($_SERVER['DOCUMENT_ROOT'].'/templates/emails/xxx.jpg'));


        // open the file
        $sourcefile     = $_SERVER['DOCUMENT_ROOT'].'/templates/emails/'.$template.'.html.tpl';
        $fh             = fopen($sourcefile, 'r');
        $htmltemplate       = fread($fh, filesize($sourcefile));
        fclose($fh);

        // set the content  
        if($template == 'confirm'){$replaceOld = array("[*code*]", "[*imgsrc*]");}          
        if($template == 'notify'){$replaceOld = array("[*url*]", "[*imgsrc*]");}

        $replaceNew     = array($data, $image);         
        $body           = str_replace($replaceOld, $replaceNew, $htmltemplate);         



        $message->setFrom(array($from[0] => $from[1]))
        ->setTo($to)
        ->setBody($body, 'text/html');


        if (!$mailer->send($message, $failures)){
          return "Failures:";
          return print_r($failures);
        }else{
            return 'success';
        }

    }
}

Который будет отображать изображение в моем шаблоне здесь:

<td id="head" height="80" width="640" colspan="3" valign="top" align="left">
<image src="[*imgsrc*]" width="140" height="80" alt="xxx"/>         
</td>

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Ух ты, наконец-то решено это. "image", конечно, не является корректным тегом HTML ... после попытки 3 разных библиотек php я нашел это ..

  <td id="head" height="80" width="640" colspan="3" valign="top" align="left">
    <image src="[*imgsrc*]" width="140" height="80" alt="xxx"/>         
    </td>
1 голос
/ 08 февраля 2011

Я видел такое поведение и в GMail и думаю, что именно так GMail отображает почту со встроенными изображениями.

Для получения дополнительной информации см. Эту ссылку:http://www.getelastic.com/email-design-for-gmail/

Знаете ли вы, что Gmail по умолчанию отключает изображения в письмах HTML, даже если ваш клиент добавил вас в свой безопасный список?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...