Я использую встроенную почтовую функцию php для отправки писем.До сих пор я многого достиг, просматривая другие примеры и отбрасывая то, что, по моему мнению, было бы необходимо.
Мой текущий код для отправки писем со встроенными изображениями выглядит следующим образом.Контент генерируется с использованием шаблона, который может иметь или не иметь некоторые заполнители, которые заменяются значениями из моей базы данных (это опущено)
function sendEmail($to, $subject, $htmlmessage, $inline_images = array()){
define('RN', "\n");
/* define mime boundaries */
$mime_boundary_mix = "_mix_" . md5(time());
/* set headers */
$headers = "From: info@domain.nl" . RN;
$headers .= "Reply-To: info@domain.nl" . RN;
$headers .= "Return-Path: info@otherdomain.nl" . RN;
$headers .= "Message-ID: <".time()."_DOMAIN@".$_SERVER['SERVER_NAME'].">" . RN;
$headers .= "X-Mailer: PHP v".phpversion() . RN;
$headers .= "Mime-Version: 1.0" . RN;
$headers .= "Content-Type: multipart/mixed;" . RN;
$headers .= " boundary=\"{$mime_boundary_mix}\"";
/* start email body with mime_boundary */
$msg = "--{$mime_boundary_mix}" . RN;
/* include html */
$msg .= "Content-Type: text/html; charset=\"iso-8859-15\"". RN;
$msg .= "Content-Transfer-Encoding: 8bit". RN . RN;
$msg .= $htmlmessage . RN;
/* check if there are inline images */
if(count($inline_images) > 0) {
foreach($inline_images as $image) {
$path_to_image = $image['path'];
$image_filename = basename($path_to_image);
$image_type = filetype($path_to_image);
$file_handler = fopen($path_to_image, 'rb');
$image_data = chunk_split(base64_encode(fread($file_handler, filesize($path_to_image))));
fclose($file_handler);
/* start mime boundary */
$msg .= "--{$mime_boundary_mix}" . RN;
/* add image data */
$msg .= "Content-Type: {" . image_type_to_mime_type (exif_imagetype($path_to_image)) . "};" . RN;
$msg .= " name=\"{$image_filename}\"" . RN;
$msg .= "Content-Disposition: inline;" . RN;
$msg .= " filename=\"{$image_filename}\"" . RN;
$msg .= "Content-Transfer-Encoding: base64" . RN . RN;
$msg .= $image_data . RN . RN;
}
/* end mime boundary */
$msg .= "--{$mime_boundary_mix}--" . RN;
}
/* end mime boundary */
$msg .= "--{$mime_boundary_mix}--" . RN;
return mail($to, $subject, $msg, $headers);
}
$ inline_images - это массив, который содержит элементы с путями к изображениямнапример: array ([0] => array ('path' => "myimage.png")) (если я не ошибаюсь, но это не важно)
Может кто-нибудь сказать мне, почему этокод, Outlook помещает значок вложения в это электронное письмо, и почему gmail показывает предупреждение: хотите ли вы показать все изображения и не показывает, когда я разрешаю это?Несколько вопросов по этому поводу: - Получение этого электронного письма в Outlook работает нормально, но я хотел бы скрыть значок скрепки, если это возможно, ведь это встроенное изображение, а не вложение.- В GMail я получаю электронное письмо с изображениями в виде вложений и пробелами (поврежденное изображение-значок) на месте всех изображений в электронном письме. Как это исправить?GMail сначала спрашивает меня, хочу ли я разрешить изображения, но после того, как я разрешу, появляются пробелы.И можно ли также скрыть изображения в виде вложений в GMail?- Я также попытался просмотреть электронную почту в Office Outlook Web Access, которая представляла электронную почту точно так же, как это делал GMail: изображения не показывались, а только как вложения.
Может ли кто-нибудь помочь мне с этим?Если вам нужна более подробная информация, пожалуйста, спросите.