如何在Gmail插件中将含附件的邮件转换为Blob格式
解决方案
一、邮件正文转Blob
getBody()返回的是HTML格式字符串,你可以用Utilities.newBlob()将其转换为Blob对象,指定对应的MIME类型:
function loadAddon(event){ var accessToken = event.gmail.accessToken; var messageId = event.gmail.messageId; GmailApp.setCurrentMessageAccessToken(accessToken); var mailMessage = GmailApp.getMessageById(messageId); // 将邮件正文转换为Blob var emailContent = mailMessage.getBody(); var bodyBlob = Utilities.newBlob(emailContent, 'text/html', '邮件正文.html'); console.log('正文Blob:', bodyBlob); }
二、邮件附件转Blob
Gmail插件中,mailMessage.getAttachments()方法直接返回Blob对象数组,无需额外转换:
function loadAddon(event){ var accessToken = event.gmail.accessToken; var messageId = event.gmail.messageId; GmailApp.setCurrentMessageAccessToken(accessToken); var mailMessage = GmailApp.getMessageById(messageId); // 获取所有附件的Blob对象 var attachments = mailMessage.getAttachments(); attachments.forEach(function(attachmentBlob, index){ console.log(`第${index+1}个附件Blob:`, attachmentBlob); // 可在此处对Blob进行后续操作(如上传到云端、存储等) }); }
三、将正文+附件打包为ZIP Blob
如果需要把整个邮件内容(正文+附件)合并成一个Blob,可使用Utilities.zip()创建ZIP格式的Blob:
function loadAddon(event){ var accessToken = event.gmail.accessToken; var messageId = event.gmail.messageId; GmailApp.setCurrentMessageAccessToken(accessToken); var mailMessage = GmailApp.getMessageById(messageId); // 准备要打包的Blob列表 var blobsToZip = []; // 添加正文Blob var bodyBlob = Utilities.newBlob(mailMessage.getBody(), 'text/html', '邮件正文.html'); blobsToZip.push(bodyBlob); // 添加附件Blob blobsToZip = blobsToZip.concat(mailMessage.getAttachments()); // 创建ZIP格式的Blob var zipBlob = Utilities.zip(blobsToZip, '邮件内容打包.zip'); console.log('打包后的ZIP Blob:', zipBlob); }
关键API说明
Utilities.newBlob(data, contentType, name):将字符串、字节数组等数据转换为Blob对象,需指定MIME类型和文件名。GmailMessage.getAttachments():返回邮件所有附件的Blob对象数组,每个对象包含附件的名称、大小、MIME类型等属性。Utilities.zip(blobs, zipName):将多个Blob打包为一个ZIP格式的Blob,适合批量处理邮件内容。
内容的提问来源于stack exchange,提问作者Shiv Yadav
相关产品推荐
相关产品推荐

