使用 Google Apps 脚本删除 Gmail 电子邮件的附件

2023-11-28前端开发问题
9

本文介绍了使用 Google Apps 脚本删除 Gmail 电子邮件的附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

使用 Google Apps 脚本 (http://script.google.com),我从 文档,如何发送、转发、移至垃圾邮件等,但我不知道't find 如何删除电子邮件的文件附件,即:

Using Google Apps Script (http://script.google.com), I know from the docs, how to send, forward, move to trash messages, etc. but I don't find how to remove a file attachement of an email, i.e.:

  1. 保留文本内容(HTML 或纯文本都可以)
  2. 保留原发件人,保留收件人
  3. 保留原始消息日期/时间(重要!)
  4. 删除附件

如果不能通过 API,有没有办法在保留 1、2 和 3 的同时将消息重新发送给自己?

注意:GmailAttachment 类看起来很有趣,并允许列出收件人:

Note: the GmailAttachment class looks interesting and allows to list recipients:

var threads = GmailApp.getInboxThreads(0, 10);
 var msgs = GmailApp.getMessagesForThreads(threads);
 for (var i = 0 ; i < msgs.length; i++) {
   for (var j = 0; j < msgs[i].length; j++) {
     var attachments = msgs[i][j].getAttachments();
     for (var k = 0; k < attachments.length; k++) {
       Logger.log('Message "%s" contains the attachment "%s" (%s bytes)',
                  msgs[i][j].getSubject(), attachments[k].getName(), attachments[k].getSize());
     }
   }
 }

但我不知道如何删除附件.

but I don't find how to remove an attachment.

注意:我已经研究了许多其他解决方案,我已经阅读了几乎所有关于此的文章(具有专用 Web 服务的解决方案,具有本地客户端,如 Thunderbird + 附件提取器插件等),但没有一个真的很酷.这就是为什么我一直在寻找通过 Google Apps 脚本手动执行此操作的解决方案.

推荐答案

看起来消息必须是 重新创建-ish:

Looks like messages will have to be re-created-ish:

消息是不可变的:它们只能被创建和删除.除了应用于给定消息的标签之外,不能更改任何消息属性.

Messages are immutable: they can only be created and deleted. No message properties can be changed other than the labels applied to a given message.

将 高级 Gmail 服务 与 Gmail API insert() 您可以使用以下方法破解它:Gmail.Users.Messages.insert(resource, userId)

Using Advanced Gmail Service with the Gmail API insert() you can hack your way around it using: Gmail.Users.Messages.insert(resource, userId)

此高级服务必须启用 使用前.

This advanced service must be enabled before use.

示例:[使用 email_id 或您希望获取电子邮件的任何方式填写 EMAIL_ID]

Example: [fill in the EMAIL_ID with an email_id or in whatever way you want to get the email]

function removeAttachments () {
  // Get the `raw` email
  var email = GmailApp.getMessageById("EMAIL_ID").getRawContent();

  // Find the end boundary of html or plain-text email
  var re_html = /(-*w*)(
)*(
)*(?=Content-Type: text/html;)/.exec(email);
  var re = re_html || /(-*w*)(
)*(
)*(?=Content-Type: text/plain;)/.exec(email);

  // Find the index of the end of message boundary
  var start = re[1].length + re.index;
  var boundary = email.indexOf(re[1], start);

  // Remove the attachments & Encode the attachment-free RFC 2822 formatted email string
  var base64_encoded_email = Utilities.base64EncodeWebSafe(email.substr(0, boundary));
  // Set the base64Encoded string to the `raw` required property
  var resource = {'raw': base64_encoded_email}

  // Re-insert the email into the user gmail account with the insert time
  /* var response = Gmail.Users.Messages.insert(resource, 'me'); */

  // Re-insert the email with the original date/time 
  var response = Gmail.Users.Messages.insert(resource, 'me', 
                      null, {'internalDateSource': 'dateHeader'});

  Logger.log("The inserted email id is: %s",response.id)
}

这将从电子邮件中删除附件并将其重新插入您的邮箱.

This will remove the attachments from the email and re-insert it into your mailbox.

编辑/更新:新的正则表达式可以处理 html 和纯文本电子邮件 - 现在应该可以处理多个边界字符串

edit/update: New RegExp to work with html&plain-text only emails - should now work on multiple boundary strings

这篇关于使用 Google Apps 脚本删除 Gmail 电子邮件的附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

js删除数组中指定元素的5种方法
在JavaScript中,我们有多种方法可以删除数组中的指定元素。以下给出了5种常见的方法并提供了相应的代码示例: 1.使用splice()方法: let array = [0, 1, 2, 3, 4, 5];let index = array.indexOf(2);if (index -1) { array.splice(index, 1);}// array = [0,...
2024-11-22 前端开发问题
182

JavaScript小数运算出现多位的解决办法
在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
2024-10-18 前端开发问题
301

JavaScript(js)文件字符串中丢失"\"斜线的解决方法
问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转...
2024-10-17 前端开发问题
437

layui中table列表 增加属性 edit="date",不生效怎么办?
如果你想在 layui 的 table 列表中增加 edit=date 属性但不生效,可能是以下问题导致的: 1. 缺少日期组件的初始化 如果想在表格中使用日期组件,需要在页面中引入 layui 的日期组件,并初始化: script type="text/javascript" src="/layui/layui.js"/scrip...
2024-06-11 前端开发问题
455

Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript
Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)...
2024-04-20 前端开发问题
5

CoffeeScript 总是以匿名函数返回
CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)...
2024-04-20 前端开发问题
13