PHP Прикрепление изображения к электронной почте

Есть ли способ прикрепить изображение к почтовому сообщению в формате HTML, созданному на PHP?

Мы должны убедиться, что корпоративный логотип находится на электронных письмах, отправляемых клиентам, которые могут не иметь доступа к Интернету во время чтения их электронной почты (они, очевидно, будут иметь его для загрузки файлов).

6 ответов

Решение

Попробуйте пакет PEAR Mail_Mime, который может вставлять изображения для вас.

Вам нужно использовать метод addHTMLImage() и передать идентификатор содержимого (cid), который представляет собой уникальную строку текста, которую вы также будете использовать в атрибуте src вашего img как cid: URL. Например:

include('Mail.php');
include "Mail/mime.php";


$crlf = "\r\n";
$hdrs = array( 
        'From' => 'foo@bar.org', 
        'Subject' => 'Mail_mime test message' 
        ); 

$mime = new Mail_mime($crlf); 

//attach our image with a unique content id
$cid="mycidstring";
$mime->addHTMLImage("/path/to/myimage.gif", "image/gif", "", true, $cid);

//now we can use the content id in our message
$html = '<html><body><img src="cid:'.$cid.'"></body></html>';
$text = 'Plain text version of email';

$mime->setTXTBody($text);
$mime->setHTMLBody($html); 

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =& Mail::factory('mail');
$mail->send('person@somewhere.org', $hdrs, $body);

Вероятно, проще всего использовать какую-то библиотеку, которая может работать с вложениями электронной почты. Например, PEAR's Mail_Mime.

Пакет PEAR Mail_Mime - это то, что вам нужно.

После того, как вы настроили свое сообщение, добавить вложение так же просто, как:

$mime = new Mail_mime("\n");

$mime->setTXTBody($msg_text);
$mime->setHTMLbody($msg_html);

// Add gif as attachment to mail
$mime->addAttachment("/path/to/image/smile.gif", "image/gif");

$body = $mime->get();
$headers = $mime->headers($headers);
$mail->send("joe@bloggs.com", $headers, $body);

Если вы хотите, чтобы ваш логотип отображался в определенном месте электронной почты, а не только как вложение, вы можете сделать следующее:

// In your message html:
<img src='logo.gif' alt='Our logo' />

// PHP:
$mime->addHTMLImage('/path/to/image/logo.gif');

Этот подход может иметь неоднозначные результаты в зависимости от почтового клиента вашего пользователя, поэтому перед отправкой попробуйте проверить свой формат на фиктивных учетных записях gmail, yahoo и hotmail.

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

В частности, написание электронных писем для отправки через PHP наполнено потенциальными ошибками и должно выполняться только в том случае, если вы действительно хорошо представляете, что может пойти не так.

Если вы планируете отправлять электронные письма довольно интенсивно, я бы настоятельно рекомендовал сделать это через выделенный клиент почтового маркетинга или внедрить один из множества API почтового маркетинга, который отправит его вам. ( mailchimp, видимо, приличный).

Попробуйте swiftmailer. Вот хороший пример того, как использовать встроенное изображение. http://swiftmailer.org/wikidocs/v3/embedding_images?s[]=embed

Вы катаетесь самостоятельно или используете сборный класс? Я сам рекомендую PHP Mailer[0], а также PEAR::Mail_Mime[1] среди других, которые Google с радостью поможет вам найти. Я использую PHP Mailer для отправки сообщений со встроенными изображениями [2] в течение многих лет без помех, хотя имейте в виду, что каждое изображение значительно увеличивает пропускную способность электронной почты, поэтому, как правило, его не следует использовать ни для чего в большом объеме. И чтобы повторить Билла, используйте также текстовую альтернативу.

[0] http://phpmailer.sourceforge.net/

[1] http://pear.php.net/manual/en/package.mail.mail-mime.php

[2] http://phpmailer.sourceforge.net/docs/PHPMailer/PHPMailer.html

взято с http://lists.evolt.org/archive/Week-of-Mon-20060612/183029.html

Другие вопросы по тегам