Отправка электронной почты в php со встроенными изображениями - PullRequest
2 голосов
/ 31 марта 2011

Я использую встроенную почтовую функцию 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: изображения не показывались, а только как вложения.

Может ли кто-нибудь помочь мне с этим?Если вам нужна более подробная информация, пожалуйста, спросите.

1 Ответ

0 голосов
/ 31 марта 2011

Почему вы не можете найти такие библиотеки, как phpmailer или switmailer.? Они обеспечивают полную поддержку HTML-почты. Также вам не нужно создавать все заголовки.

...