2011-02-07 1 views
1

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

ответ

1

Ничего себе, наконец-то поселился. «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> 
+0

Итак, вы использовали '' вместо ''? –

+0

Да, вот что я сделал – dubbelj

1

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

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

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

+0

Решение должно заключаться в ссылке на внешний сервер. Чем получатель должен будет показывать изображения. Это то, о чем я думаю выше. Я хочу прикрепить изображение, чтобы избежать этого поведения. Используя PHPmailer, я смог это сделать. Я не уверен, почему это не работает с SwiftMailer. Исправьте меня, если я ошибаюсь. – dubbelj