PHPMailer отправляет изображение base64 из базы данных

#php #email #base64

Вопрос:

Я пытаюсь прикрепить изображения base64 в свою электронную почту PHPMailer.

Возможно ли это сделать? Как я могу прикрепить массив изображений $base64Images к электронной почте? По электронной почте я получаю файлы с не поддерживаемым форматом.

 $base64Images = array(3){
    [0]=>
    string(2747277) "data:image/jpeg;base64,9j/4AAA ..."
    [1]=>
    string(2747277) "data:image/jpeg;base64,9j/4AAA ..."
    [2]=>
    string(2747277) "data:image/jpeg;base64,9j/4AAA ..."
}
 

Моя функция электронной почты.

 try {
  $mail = new PHPMailer(true);
  if ($smtp) {
    $mail->IsSMTP();
    $mail->SMTPKeepAlive = true;
    $mail->Host = $smtp;
    $mail->Port = $port;
    if ($auth) {
      $mail->SMTPAuth = true;
      $mail->Username = $auth_user;
      $mail->Password = $auth_password;
    }
  }
  $mail->CharSet = 'utf-8';
  $mail->ContentType = 'text/html';
  $mail->SetFrom($sender);
  $mail->AddAddress($recipient);
  $mail->Subject = $mailSubject;
  $mail->MsgHTML($mailBody);
 

Прикрепите к электронной почте.

   foreach ($base64Images as $base64Image) {
    $mail->AddStringAttachment($base64Image, 'Filename.jpeg', 'base64', 'image/jpeg');
  }


  if(!$mail->Send())
  {
    Log::write( "Error sending : " . $mail->ErrorInfo . " mailSubject :" . $mailSubject );
  }else {
    Log::write( "Email was successfully sent);
  }
} catch (Exception $e) {
  Log::write("{$e->getCode()}: {$e->getMessage()} in {$e->getFile()} at line {$e->getLine()}");

}
 

Ответ №1:

Передайте ваши изображения в кодировке base64 в качестве HTML-тегов, затем установите для параметра mail config IsHTML значение true, например:

 $Body = '<img src="' . $base64Images[0] . '"/>'
$mail->Body = $Body;
$mail->IsHTML(true);
 

Если вы хотите прикрепить изображения к электронной почте, вам следует просто позвонить base64_decode по ней, ничего не меняя, а затем передать ее. Это должно сработать.
(Конечно, расшифруйте его без текста data:image/png;base64 заголовка).

Комментарии:

1. Что делать, если я хочу, чтобы изображения были прикреплены не в теле ?

2. Структурируйте свою переменную тела в виде HTML-страницы, как вы хотите, и прикрепляйте свои изображения там, где вы хотите. $Body = ‘разделы перед изображениями <ваши изображения> разделы после изображений’

3. Ратеб Хаббаб, я немного меняю тему .. Я пытаюсь прикреплять изображения.