Встраивать изображения для использования в почтовом сообщении с помощью PHP?

Я знаю, как вставлять изображение в электронную почту как вложение, но это не совсем то, что я хочу делать. То, что я хочу сделать, – это вставить изображение в сообщение и использовать его в теле самого сообщения электронной почты. Возможно ли это сделать или, возможно, ссылаться на прикрепленный файл, каким-то образом использоваться в сообщении?

Должен ли я даже беспокоиться об этом? Полезно ли просто загружать их по ссылке на изображение в моей сети? Я думал, что это потребует некоторой загрузки с моего сервера, поэтому его не нужно было загружать непосредственно с моего сайта в каждое открытое сообщение электронной почты, тем самым немного сокращая пропускную способность.

Примечание. Я не ищу никаких фреймворков или библиотек электронной почты и т. Д., Просто для простого решения этой задачи.

Solutions Collecting From Web of "Встраивать изображения для использования в почтовом сообщении с помощью PHP?"

Люди будут звонить, чтобы сказать вам использовать SwiftMailer или другую библиотеку. Но это не так сложно. Это действительно сложно, но не сложно. Ниже приведена функция, которую я использую. Я немного анонимизировал его и, надеюсь, ничего не сломал. В сообщении html (которое я получаю от другой функции) ссылку на прикрепленное изображение следующим образом:

$output .= '<p><img src="cid:' . $linkID . '" alt="graph" /></p>'; 

Где $linkID – это то же значение, что и в приведенной ниже функции.

 public function sendEmail($emailAddress) { $random_hash = md5(date('r', time())); $htmlString = $this->getHTML($random_hash); $message = "--mixed-$random_hash\n"; $message .= 'Content-Type: multipart/alternative; boundary="alt-' . $random_hash . '"' . "\n\n"; $message .= 'MIME-Version: 1.0' . "\n"; $message .= '--alt-' . $random_hash . "\n"; $message .= 'Content-Type: text/plain; charset="iso-8859-1"' . "\n"; $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n"; // text message $message .= strip_tags($htmlString) . "\n\n"; $message .= '--alt-' . $random_hash . "\n"; $message .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n"; // $message .= 'MIME-Version: 1.0' . "\n"; $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n"; // html message $message .= $htmlString . "\n\n"; $message .= '--alt-' . $random_hash . '--' . "\n"; // graph image if($this->selectedGraph != 0) { $graphString = $this->getGraph(); $graphString = chunk_split(base64_encode($graphString)); $linkID = 'graph-' . $random_hash . '-image'; $message .= '--mixed-' . $random_hash . "\n"; $message .= 'MIME-Version: 1.0' . "\n"; $message .= 'Content-Transfer-Encoding: base64' . "\n"; $message .= 'Content-ID: ' . $linkID . "\n"; $message .= 'Content-Type: image/gif; name="graph.gif"' . "\n"; $message .= 'Content-Disposition: attachment' . "\n\n"; $message .= $graphString; $message .= '--mixed-' . $random_hash . '--' . "\n"; } else { $message .= '--mixed-' . $random_hash . '--' . "\n"; } $headers = 'From: ' . $this->from. "\r\nReply-To: " . $this->replyto; $headers .= "\r\nContent-Type: multipart/related; boundary=\"mixed-" . $random_hash . "\"\r\nMIME-Version: 1.0"; $flags = '-f ' . BOUNCED_EMAIL_ADDRESS; return mail($emailAddress, $this->subject, $message, $headers, $flags); } 

Независимо от того, стоит ли делать, это еще один вопрос. Если вы прикрепляете изображение, вы используете пропускную способность, чтобы отправить сообщение. Может быть, вам лучше использовать пропускную способность одновременно, а не распространять? Возможно, нет.

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

 Content-Type: multipart/related; type="text/html"; boundary="Boundary1" --Boundary1 Content-Type: multipart/alternative; boundary="Boundary2" --Boundary2 Content-Type: text/html; charset = "utf-8" Content-Transfer-Encoding: 8bit <img src="cid:content_id_from_attachment"> --Boundary2-- --Boundary1 Content-Type: image/jpeg; name="somefilename.jpg" Content-Transfer-Encoding: base64 Content-ID: <content_id_from_attachment> Content-Disposition: inline; filename="somefilename.jpg" //binary data --Boundary1-- 

Граница, кодировка, Content-Transfer-Encoding, конечно, все выбирается. Пакет PHPMailer может сделать это автоматически для вас: http://www.ustrem.org/en/article-send-mail-using-phpmailer-en/

См. Также изображения по адресу: http://mailformat.dan.info/body/html.html.


Я думаю, что единственный способ сделать это – ссылаться на изображение по URL-адресу:

 <img src="http://www.youwebsite.com/yourimage.jpg" alt="This is a description" />