Я знаю, как вставлять изображение в электронную почту как вложение, но это не совсем то, что я хочу делать. То, что я хочу сделать, – это вставить изображение в сообщение и использовать его в теле самого сообщения электронной почты. Возможно ли это сделать или, возможно, ссылаться на прикрепленный файл, каким-то образом использоваться в сообщении?
Должен ли я даже беспокоиться об этом? Полезно ли просто загружать их по ссылке на изображение в моей сети? Я думал, что это потребует некоторой загрузки с моего сервера, поэтому его не нужно было загружать непосредственно с моего сайта в каждое открытое сообщение электронной почты, тем самым немного сокращая пропускную способность.
Примечание. Я не ищу никаких фреймворков или библиотек электронной почты и т. Д., Просто для простого решения этой задачи.
Люди будут звонить, чтобы сказать вам использовать 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" />