Есть ли способ прикрепить изображение к сообщению электронной почты с форматированием html, созданному на PHP?
Нам необходимо обеспечить, чтобы корпоративный логотип был отправлен по электронной почте клиентам, которые могут не иметь доступа к Интернету, читая их электронную почту (у них, очевидно, будет возможность загрузить файлы).
Попробуйте пакет PEAR Mail_Mime , который может вставлять изображения для вас .
Вам нужно использовать метод addHTMLImage () и передать идентификатор содержимого (cid), который является уникальной строкой текста, которую вы также будете использовать в атрибуте src вашего img как URL-адрес cid:
Например:
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);
в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);
Вероятно, проще всего использовать библиотеку, которая может обрабатывать вложения электронной почты. Например, Mail_Mime PEAR.
Пакет Mail_Mime PEAR – вот что вы здесь делаете.
После того, как вы установили свое сообщение, добавление вложения будет таким же простым, как:
$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.
Вы катаетесь самостоятельно или используете класс prefab? Я рекомендую 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#AddEmbeddedImage
взято из http://lists.evolt.org/archive/Week-of-Mon-20060612/183029.html
Здесь содержится более чем достаточно ответов, которые помогут исправить вашу конкретную проблему, но я просто подумал, что стоит отметить, что у вас может быть большая проблема, которую вы не рассматривали.
В частности – писать почтовые отправители, отправляемые через PHP, заполняются потенциальными ошибками и должны выполняться только в том случае, если у вас есть действительно хорошее представление о том, что может пойти не так.
Если вы планируете отправлять электронные письма довольно интенсивно, я бы настоятельно предложил сделать это через специализированный клиент по электронной почте или реализовать один из многих API-интерфейсов электронной почты, которые отправят его для вас. ( mailchimp, по-видимому, достойный).
Попробуйте swiftmailer вот хороший пример того, как использовать встроенное изображение http://swiftmailer.org/wikidocs/v3/embedding_images?s%5B%5D=embed