Люди сообщат вам, чтобы вы использовали 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);
}
Стоит ли это делать - это другой вопрос. Если вы прикрепите изображение, вы используете пропускную способность для отправки сообщения. Может быть, вам лучше использовать пропускную способность сразу, а не распределяться? Возможно нет.
Я не использовал прикрепленные изображения, пока мне не пришлось отправлять разные изображения каждому получателю. Я не собирался хранить и управлять всеми этими изображениями на нашем сервере (и пытаться однозначно назвать их).