如何使用谷歌应用程序脚本从电子邮件中提取内联文件/图像
How to lift inline files/images from an email using Google App Script?
我想使用谷歌应用程序脚本收集电子邮件中所有内联文件的名称、内容类型和byes。消息对象在应用程序脚本中有一个getAttachments()
函数,但它只返回一个非内联的Gmail附件数组。
当我查看电子邮件的原始内容时,我可以看到内联图像的数据在那里,但解析它很困难,我想检查一下是否有我不知道的谷歌实用程序?
这是一个相当有趣的破解游戏,所以开始吧。
- 使用
.getRawContent()
获取电子邮件的原始内容。这包含了所有的内容,包括base64编码的附件,如图像 - 分析电子邮件内容以将其缩小为
image/gif
附件类型 - 将其缩小到作为图像的base64编码字符串
- 使用
Utilities.base64Decode()
实用程序获取Byte数组
以下是我的想法:
注意:这只是第一张图片,我相信你可以接受这个概念并适应自己的需求。
function myFunction() {
var emails = GmailApp.getThreadById(myThreadID).getMessages();
var contents = emails[0].getRawContent();
var firstImageStart = contents.substring(contents.indexOf('Content-Type: image/gif;'), contents.length); //Finds the image/gif type
var name = firstImageStart.substring(firstImageStart.indexOf('name=') + 5, firstImageStart.indexOf(''r'n')); //get name from raw data
var attachmentStringStart = firstImageStart.substring(firstImageStart.indexOf('X-Attachment-Id:'), firstImageStart.length); //Finds where the attachment ID line is
var startOfBase64 = attachmentStringStart.substring(attachmentStringStart.indexOf(''r'n'r'n') + 4, attachmentStringStart.length); //Finds the end of that line and the start of the base64 encoded attachment
var base64String = startOfBase64.substring(0, startOfBase64.indexOf(''r'n--')); //Finds the end of the base64 encoded attachment
var byteArray = Utilities.base64Decode(base64String); //Retrieves a byteArray of the base64 encoded image
var blob = Utilities.newBlob(byteArray, 'image/gif', name.substring(1, name.length - 1)); //Create blob
var newfile = DriveApp.createFile(blob);
DriveApp.getRootFolder().addFile(newfile); //Write new file to drive root
}
这是有效的,并将图像写入我的驱动器,显示为正确的图像。
我只是遵循了原始内容的数据布局模式,您可以通过单击回复按钮旁边下拉列表中gmail中的Show Original
链接来查看。
相关文章:
- 使用gulp-angular gettext从JS文件中提取字符串不起作用
- 可以't从xml文件中提取数据
- 我想批量上传zip文件中的简历,并提取html5和angular中每个简历的内容
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 如何使用谷歌应用程序脚本从电子邮件中提取内联文件/图像
- 从CSV文件中提取JavaScript代码
- 使用 gulp 将打字稿导出提取到 json 文件
- 从导入的 HTML/JS 文件中提取变量
- 我正在尝试从 xhtml 文件中动态提取所有
元素,并使用 javascript 将它们放入选择列表中
- 在使用java使用dropbox选择器从dropbox中提取文件后,如何将文件存储在服务器中
- 使用ng repeat从两个不同的JSON文件中提取数据
- 使用Angularjs提取2个不同的JSON文件
- 从html文件中的js中提取链接
- 使用javascript[ClientSide]下载并提取gz文件
- 用于按周号提取文件的 InDesign 脚本
- 使用 Web 应用程序访问本地文件系统并提取文件元数据
- 使用php提取文件的元数据
- 使用jszip提取文件并使用npapi-file-io保存到本地磁盘.二进制文件保存非常慢
- 用于匹配/提取文件扩展名的Javascript正则表达式
- JavaScript - 提取文件夹名称