Изображения Base64 для gmail

Я создаю несколько встроенных изображений для электронной почты, отправленной с iPad. Выглядит отлично на всех настольных почтовых клиентах, но gmail, похоже, не нравится образ base64, и он отображается как текст.

У кого-нибудь есть удача встраивания изображений с base64 и gmail? Или знаете лучшее решение для отправки HTML-писем с изображениями с iPad?

Ответ 1

Ссылки из Moin Zaman показывают результаты тестов, которые устарели (с 2008 года). По состоянию на мое тщательное тестирование сегодня Gmail поддерживает отображение встроенных изображений для обоих методов.

Используйте base64-кодирование изображения внутри строки <img src="...">

<html><body><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO..."</body></html>

Использовать кодированное изображение base64 в качестве вложения

Message-ID: <[email protected]>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-originating-ip: [xxx.xxx.xxx.xxx]

Content-Type: multipart/related;
    boundary="_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_";
    type="multipart/alternative"
MIME-Version: 1.0
Return-Path: [email protected]
X-OriginatorOrg: example.com

--_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_
Content-Type: multipart/alternative;
    boundary="_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_"

...skipping Content-Type: text/plain which would be here for this example...

--_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html><body><img border=3D"0" width=3D"980" height=3D"230" id=3D"Picture_x0020_1" src==3D"cid:[email protected]"></body></html>

--_000_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_--

--_038_BE0243A40B89D84DB342702BC5FD6D313EA3BE1BBYMAIL_
Content-Type: image/png; name="image001.png"
Content-Description: image001.png
Content-Disposition: inline; filename="image001.png"; size=32756;
    creation-date="Mon, 08 Oct 2012 15:27:07 GMT";
    modification-date="Mon, 08 Oct 2012 15:27:07 GMT";
Content-ID: <[email protected]>
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO
xAAADsQBlSsOGwAAf5lJREFUeF7tvQlgVdW18L+ZR20mpsSLCYlBQKwgwRCMr9TAqzg0CAl98Y9a
ikBfHxL1A/r0tUr77Feg1mDav4LUijxTk8hLRIstQ2mJhEiAWAEpNCGRa8KUSQXCzLf2cOZz7j33
5s5Zx6j3nruHtX97n33WWWfttbtdv36d4IEEkAASQAJIAAkgASSABJCA/wl0938VWAMSQAJIAAkg
ASSABJAAEkAClAAq3zgOkAASQAJIAAkgASSABJBAgAig8h0g0FgNEkACSAAJIAEkgASQABJA5RvH
...

Чтобы выполнить собственное тестирование, вы можете отправить электронное письмо с встроенным встроенным изображением, используя один из следующих методов.

Отправьте электронное письмо, используя один из указанных выше, в свою учетную запись Gmail, затем откройте электронную почту в веб-клиенте Gmail (любой браузер, который работает), и используйте кнопку "Стрелка вниз" рядом с кнопкой "Ответить", чтобы выбрать параметр "Показать оригинал". Это покажет вам, как оно получено.

Я считаю, что наилучшей практикой является использование встроенного изображения в качестве метода привязки.

В моем тестировании с помощью веб-клиента Gmail, если я отправил 30 изображений в одном электронном письме разных размеров, некоторые из них не загрузили бы успешно показ контейнера изображений, но не изображение. Если это произойдет, попробуйте перезагрузить страницу.

В моем тестировании (Windows 7)...

  • Chrome (последняя версия) потребовала пару перезагрузок для успешной загрузки/показа всех 30 изображений
  • Opera (последняя) не будет успешно показывать все 30 изображений независимо от количества перезагрузок
  • Firefox (последний) последовательно показывал все 30 изображений без проблем
  • Internet Explorer 9 (последний) последовательно показывал все 30 изображений без проблем.
  • Safari (последний) последовательно показывал все 30 изображений без проблем

Ответ 3

Убедитесь, что вы устанавливаете Content-Type: multipart/mixed;, граница и Content-Transfer-Encoding: base64

Ответ 4

Попробуйте этих друзей.. Я уверен, что это сработает, чтобы включить изображение в качестве вложения

                    $output_hex_string_img = $image;
                    $output_bin_string_img = base64_decode($output_hex_string_img);
                    //echo base64_encode( $output_bin_string_img );
                    $XXX = base64_encode( $output_bin_string_img );

                    $from_name = "Senders Name";
                    $from_mail = "[email protected]";
                    $replyto = "[email protected]";
                    $subject = "Device Missing Notification";
                $message = "Device Missing notification has been activated on your device. Please change this setting when you find your smartphone back. Best Of Luck!!\r\r ";



                    $mailto = '[email protected]';



                        $file = $XXX;
                        $filename = "Print_shot.png";
                        $uid = md5(uniqid(time()));
                        $name = basename($file);
                        $header = "From: ".$from_name." <".$from_mail.">\r\n";
                        $header .= "Reply-To: ".$replyto."\r\n";
                        $header .= "MIME-Version: 1.0\r\n";
                        $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
                        $header .= "This is a multi-part message in MIME format.\r\n";
                        $header .= "--".$uid."\r\n";
                        $header .= "Content-type:text/html; charset=iso-8859-1\r\n";
                        $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
                        $header .= $message."\r\n\r\n";
                        $header .= "--".$uid."\r\n";
                        $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
                        $header .= "Content-Transfer-Encoding: base64\r\n";
                        $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
                        $header .= $file."\r\n\r\n";
                        $header .= "--".$uid."--";
                        mail($mailto, $subject, "", $header);

Но вы должны включить все в заголовки, используя разные заголовки Content-Type в заголовках. и все, что появляется в теле, которое может быть третьим параметром в функции почты, будет передано как пустая строка.

Ответ 5

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

[picker addAttachmentData:UIImageJPEGRepresentation(_tempImage,1) mimeType:mimeType fileName:filename];

[picker setMessageBody:emailBody isHTML:YES];

Если isHTML - YES, addAttachmentData автоматически изменится на base64 string, в письме html вы увидите img.

Если isHTML НЕТ, addAttachmentData является вложением.