解决此问题的最新方法。
问题
例如,这是使用 .getBody() 检索到的电子邮件正文
<div dir="ltr"><div><img src="?view=att&th=1401f70d4881e07f&attid=0.3&disp=emb&realattid=ii_1401f6fc7824ebe1&zw&atsh=1" alt="Inline image 4" width="200" height="180"><br></div><div><br></div><img src="?view=att&th=1401f70d4881e07f&attid=0.2&disp=emb&realattid=ii_1401f6e6c1d46c4b&zw&atsh=1" alt="Inline image 2" width="200" height="65"><div><br></div><div>
jtykuykyu</div><div><br></div><div><img src="?view=att&th=1401f70d4881e07f&attid=0.1&disp=emb&realattid=ii_1401f6e9df3a4b1c&zw&atsh=1" alt="Inline image 3" width="200" height="82"><br><div><br></div><div><br></div></div></div>
这是电子邮件的附件列表(其中是我们的内联图像):
[13-07-30 08:28:08:378 CEST] 屏幕截图 2013-07-12 下午 1.54.31.png
[13-07-30 08:28:08:379 CEST] 屏幕截图 2013-07-23 下午 5.38.51.png
[13-07-30 08:28:08:380 CEST] 屏幕截图 2013-07-25 上午 9.05.15.png
[13-07-30 08:28:08:381 CEST] test2.png
如您所见,这些图像的名称与 img 标签中可用的信息之间没有任何联系,因此没有安全的方法可以仅使用这些信息来重建正确的电子邮件。
解决方案
如何解决?我们可以使用 .getRawContent() 方法来获取实际的电子邮件并对其进行解析以获取我们需要的信息。具体来说,此方法为我们提供了附件名称和电子邮件正文中可用的“realattid”之间的关系:
内容类型:图片/png;name="2013-07-25 上午 9.05.15 截屏.png"
内容传输编码:base64
内容 ID:
X 附件 ID:ii_1401f6e9df3a4b1c
代码片段
这是一个代码片段:
- 检索电子邮件的正文和附件
- 获取正文中的所有 img 标签,并查看哪些标签链接到电子邮件中的附件
- 获取每个图像的“realattid”并使用 .getRawContent() 将此“realattid”链接到正确的附件
- 替换 img 标签以正确链接到正确的附件
- 表示这个附件不再是简单的附件而是内嵌图片
- 完成所有操作后,您就拥有了发送此电子邮件副本所需的所有数据,并显示正确的内嵌图像。
//////////////////////////////////////////////////////////////////////////////
// Get inline images and make sure they stay as inline images
//////////////////////////////////////////////////////////////////////////////
var emailTemplate = selectedTemplate.getBody();
var rawContent = selectedTemplate.getRawContent();
var attachments = selectedTemplate.getAttachments();
var regMessageId = new RegExp(selectedTemplate.getId(), "g");
if (emailTemplate.match(regMessageId) != null) {
var inlineImages = {};
var nbrOfImg = emailTemplate.match(regMessageId).length;
var imgVars = emailTemplate.match(/<img[^>]+>/g);
var imgToReplace = [];
if(imgVars != null){
for (var i = 0; i < imgVars.length; i++) {
if (imgVars[i].search(regMessageId) != -1) {
var id = imgVars[i].match(/realattid=([^&]+)&/);
if (id != null) {
var temp = rawContent.split(id[1])[1];
temp = temp.substr(temp.lastIndexOf('Content-Type'));
var imgTitle = temp.match(/name="([^"]+)"/);
if (imgTitle != null) imgToReplace.push([imgTitle[1], imgVars[i], id[1]]);
}
}
}
}
for (var i = 0; i < imgToReplace.length; i++) {
for (var j = 0; j < attachments.length; j++) {
if(attachments[j].getName() == imgToReplace[i][0]) {
inlineImages[imgToReplace[i][2]] = attachments[j].copyBlob();
attachments.splice(j, 1);
var newImg = imgToReplace[i][1].replace(/src="[^\"]+\"/, "src=\"cid:" + imgToReplace[i][2] + "\"");
emailTemplate = emailTemplate.replace(imgToReplace[i][1], newImg);
}
}
}
}
//////////////////////////////////////////////////////////////////////////////
var message = {
htmlBody: emailTemplate,
subject: selectedTemplate.getSubject(),
attachments: attachments,
inlineImages: inlineImages
}