我正在为从iPad发送的电子邮件生成一些内联图片。在所有桌面电子邮件客户端中看起来都很棒,但gmail似乎不喜欢base64图像,它显示为文本。
任何人都有运气嵌入base64和gmail的运气吗? 或者知道一个更好的解决方案,用于发送带有iPad图像的HTML电子邮件?
答案 0 :(得分:20)
Moin Zaman的链接显示过时的测试结果(自2008年起)。从我今天的全面测试开始,Gmail确实支持为这两种方法显示嵌入式图像。
在<img src="...">
<html><body><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO..."></body></html>
使用base64编码的图像作为附件
Message-ID: <BE0243A40B89D84DB342702BC5FD6D313EA3BE1B@BYMAIL.example.com>
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@example.com
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:image001.png@01CDA268.204677C0"></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: <image001.png@01CDA268.204677C0>
Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAAA9QAAADmCAIAAAC77FroAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAO
xAAADsQBlSsOGwAAf5lJREFUeF7tvQlgVdW18L+ZR20mpsSLCYlBQKwgwRCMr9TAqzg0CAl98Y9a
ikBfHxL1A/r0tUr77Feg1mDav4LUijxTk8hLRIstQ2mJhEiAWAEpNCGRa8KUSQXCzLf2cOZz7j33
5s5Zx6j3nruHtX97n33WWWfttbtdv36d4IEEkAASQAJIAAkgASSABJCA/wl0938VWAMSQAJIAAkg
ASSABJAAEkAClAAq3zgOkAASQAJIAAkgASSABJBAgAig8h0g0FgNEkACSAAJIAEkgASQABJA5RvH
...
要进行自己的测试,您可以使用以下技术之一发送包含嵌入式嵌入图像的电子邮件
使用以上某个方式向您的Gmail帐户发送电子邮件,然后在Gmail网络客户端(任何可用的浏览器)中打开电子邮件,并使用“回复”按钮旁边的向下箭头选择“显示原始”选项。这将告诉你如何收到它。
我认为最佳做法是使用嵌入式图像作为附件方法。
在我使用Gmail网络客户端进行的测试中,如果我在一封不同尺寸的电子邮件中发送了30张图片,则有一些图片无法成功显示图片容器而非图片。如果发生这种情况,请尝试重新加载页面。
在我的测试中(Windows 7)...
答案 1 :(得分:7)
似乎没有任何官方文档,但Gmail绝对不支持此内联或作为base64中的附件。
以下是广告系列监控尝试的一些测试:
Embedding images in email
Embedding images revisited
答案 2 :(得分:3)
确保设置Content-Type:multipart / mixed; ,边界和Content-Transfer-Encoding:base64
答案 3 :(得分:0)
这很好用: 我设置了两个src属性,一个设置为data:image / png; base64,另一个设置为指向图像的链接。当您使用gmail时,它将src属性与链接一起使用,而当您使用电子邮件的其他客户端时,它将src属性与data:image / png; base64一起使用。 尝试一下!。您会看到的。
答案 4 :(得分:0)
我测试了gmail don还支持原始数据uri图像(没有base64)-我使用此代码段生成了图像(然后将其发送到gmail addres)-但图像未显示出来:(
要解决此问题,您需要使用cid将图像添加为附件,并在img标签<img src="cid:123456">
中使用该cid-更多详细信息here
function convert() {
let base64 = imageBase64.value.split('base64,')[1];
let hex = [...atob(base64)].map(c => c.charCodeAt(0).toString(16).padStart(2, 0));
let img = 'data:image/png,%' + hex.join('%');
pic.src = img;
msg.innerText = img;
}
Put your img base64 data uri here<br>
<input style="width:200px" id='imageBase64' value="data:image/bmp;base64,Qk0aAwAAAAAAABsAAAAMAAAAEAAQAAEAGAAAAAAACFpyAAAAAAAACB/NCB/NCB/NCB/NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFpyCFpyCFpyCB/NCB/NCB/NCB/NCB/NCB/NCB/NAAAAAAAAAAAAAAAAAAAAAAAAAAAACFpyCFpyCFpyCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NAAAAAAAAAAAAKoH8AAAACFpyCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NCFpyCFpyKoH8KoH8KoH8AAAACB/NCB/NCFpyCB/NCB/NKoH8CB/NCB/NKoH8CB/NCFpyCFpyKoH8KoH8CFpyCFpyCFpyCFpyCFpyCFpyCB/NCB/NCB/NCB/NCB/NAAAAAAAACFpyAAAACFpyCFpyCFpyCFpyCFpyCFpyCFpyCB/NCFpyCFpyCFpyCB/NAAAAAAAACFpyAAAAAAAACFpyCFpyCFpyCFpyCFpyCB/NCFpyCFpyCFpyCB/NCFpyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoH8KoH8KoH8KoH8KoH8KoH8KoH8CFpyAAAAAAAAAAAAAAAAAAAAAAAACFpyCFpyKoH8KoH8KoH8KoH8CFpyCFpyCFpyCFpyCFpyAAAAAAAAAAAAAAAAAAAACFpyKoH8CFpyCFpyKoH8KoH8KoH8CFpyKoH8KoH8KoH8CFpyAAAAAAAAAAAAAAAACFpyKoH8CFpyKoH8KoH8KoH8CFpyKoH8KoH8CFpyCFpyCFpyAAAAAAAAAAAAAAAAAAAACFpyCFpyCFpyKoH8KoH8CFpyKoH8AAAACFpyCFpyCFpyAAAAAAAAAAAAAAAAAAAACB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NCB/NKoH8KoH8AAAAAAAAAAAAAAAAAAAAAAAACB/NCB/NCB/NCB/NCB/NAAAAAAAAKoH8KoH8KoH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoH8KoH8KoH8">
<button onclick="convert()">Convert</button><br> Result
<br>
<textarea id='msg' rows="4" cols="50"></textarea><br>
<img id='pic'>
答案 5 :(得分:-3)
尝试这个好友..我相信这可以将图像作为附件包含
$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 = "yyyyyyyy@gmail.com";
$replyto = "yyyyyyyy@gmail.com";
$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 = 'xxxxxxxx@mail.com';
$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包含所有内容。并且在Body中出现的任何可能是mail函数中的第三个参数将作为空白字符串传递..
答案 6 :(得分:-9)
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
[picker addAttachmentData:UIImageJPEGRepresentation(_tempImage,1) mimeType:mimeType fileName:filename];
[picker setMessageBody:emailBody isHTML:YES];
如果isHTML
为YES
,addAttachmentData
将自动更改为base64字符串,在电子邮件中html可以看到你的身份。
如果isHTML
为否,则addAttachmentData
为附件。