Я использую код ниже, чтобы прикрепить и вставить изображение в электронное письмо. Это работает в Gmail, который я изначально считал самым большим препятствием. Однако по какой-то причине, когда я получаю доступ к электронной почте через Apple Mail и Thunderbird (та же учетная запись), изображение не загружается, но показывает следующее соответственно:
Что я делаю неправильно? Я не могу нормально размещать и связывать эти изображения, так как они являются графами, управляемыми данными, которые создаются на лету. Многокомпонентный стиль вложения кажется моим единственным вариантом.
$to = "...";
$body = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html><body><img src="cid:image"/></body></html>';
$eol = PHP_EOL;
$separator = md5(time());
// headers
$headers = "From: ..." . $eol;
$headers .= "Reply-To: ..." . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol;
// message
$message = "--" . $separator . $eol;
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"" . $eol;
$message .= "Content-Transfer-Encoding: 8bit" . $eol . $eol;
$message .= $body . $eol;
// attachment
$filename = "image.png";
$content = chunk_split(base64_encode(file_get_contents($filename)));
$message .= "--" . $separator . $eol;
$message .= "Content-Type: application/octet-stream; name=\"image.png\"" . $eol;
$message .= "Content-ID: <image>" . $eol;
$message .= "Content-Transfer-Encoding: base64" . $eol;
$message .= "Content-Disposition: attachment; filename=\"image.png\"" . $eol;
$message .= $content . $eol;
$message .= "--" . $separator . "--";
mail($to, "test", $message, $headers);
Задача ещё не решена.
Других решений пока нет …