Google App脚本从Gmail删除特定附件

时间:2019-11-13 10:37:11

标签: javascript google-apps-script gmail email-attachments

我对Google App脚本有点陌生,请尝试弄清楚如何使用Google App脚本解决Google邮件问题


更新:仅需要删除特定的附件,其余结构和附件也需要相同。提供的解决方案请删除所有附件!

问题:

我每天都会从供应商和客户那里收到带有pdf附件的电子邮件,有些是使用自动系统发送给我的,有些则是通过手动发送给我的,其中有些电子邮件具有附件“ noname” ,我无法打开或阅读。当有“ noname”附件被电子邮件完全忽略时,我正在使用自动化应用程序下载此pdf附件,因此我每天都会错过一些pdf


计划的解决方案:

使用Google App脚本,我尝试捕获“ noname”附件并删除,仅该文件中其余的电子邮件内容和pdf需要相同。

我设法实现代码以捕获发送无名附件的特定电子邮件,如果未读,请检查附件并删除无名


我需要咨询的地方:如何删除所选附件?

function myFunction() {

  Logger.log("unread emails: " +
             GmailApp.search('is:unread from:pdf_sender@gmail.com'));

  var deta = GmailApp.search('is:unread from:1031mymailx@gmail.com')

  var msgs = GmailApp.getMessagesForThreads(deta);

        for (var i = 0 ; i < msgs.length; i++) {
              Logger.log("msg object lenth " + msgs.length)

            for (var j = 0; j <  msgs.length; j++) {
                Logger.log("msg i object lenth " + msgs[i].length)
                var attachments = msgs[i][j].getAttachments();
                var m_id = msgs[i][j].getId()

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

                      if (attachments[k].getName() == "noname" ){

                     //  attachments[k].deleteAttachment();
                    Logger.log('Message "%s" contains the attachment "%s" (%s bytes)',  msgs[i] 
                      [j].getSubject(), attachments[k].getName(),attachments[k].getSize());

              }       
   }
  }
 }
}

1 个答案:

答案 0 :(得分:0)

GMail消息是不可变的-也就是说,您无法修改它们。但是,您可以通过下载内容,修改内容并将修改后的消息重新插入帐户来重新创建它们。

我已使用所说明的方法修改了您的代码,使其可以执行您想要的操作。它遍历搜索结果,并检查邮件是否包含名为noname的文件名。如果确实如此,它将插入原始邮件的修改内容,其中不包含noname附件。

此外,您可以选择取消注释两个不同的行,以便:

  1. 新邮件将插入INBOX标签(以便显示在收件箱中)和UNREAD标签。
  2. 插入新邮件后,原始邮件将被删除。
var BOUNDARY_REGEX = new RegExp('boundary=\"(.+)\"');

function removeAttachment(msg) {
  var emailContent = msg.getRawContent();
  if (emailContent.indexOf('filename=noname') == -1) return;

  var boundary = BOUNDARY_REGEX.exec(emailContent)[1];
  var boundaryLine = '--' + boundary;

  var sections = emailContent.split(boundaryLine);

  var filteredSections = sections.filter(function(value, index, arr) {
    return value.indexOf('filename=noname') == -1;
  });

  var resultBody = filteredSections.join(boundaryLine);
  var encodedResultBody = Utilities.base64EncodeWebSafe(resultBody);
  var resource = {'raw': encodedResultBody};
  // OPTIONAL - LABEL YOUR NEWLY CREATED MAIL AS 'INBOX' & 'UNREAD'
  // resource['labelIds'] = ['INBOX', 'UNREAD'];
  var response = Gmail.Users.Messages.insert(resource, 'me', null, {'internalDateSource': 'dateHeader'});
  Logger.log("Inserted email id is: %s", response.id);
  // OPTIONAL - TRASH ORIGINAL MESSAGE
  // GmailApp.moveMessageToTrash(msg);
  return response.id;
}

function myFunction() {
  Logger.log("unread emails: " +
             GmailApp.search('is:unread from:pdf_sender@gmail.com'));

  var deta = GmailApp.search('is:unread from:1031mymailx@gmail.com')

  var msgs = GmailApp.getMessagesForThreads(deta);

  for (var i = 0 ; i < msgs.length; i++) {
    for (var j = 0; j < msgs[i].length; j++) {
      Logger.log("msg object length " + msgs[j].length);    
      removeAttachment(msgs[i][j]);
    }
  }
}

在执行此代码之前,请确保您具有GMail Advanced服务enabled