簡體   English   中英

谷歌應用腳本從 gmail 中刪除特定附件

[英]Google app Script delete specific attachment from gmail

我對谷歌應用腳本有點陌生,並嘗試弄清楚如何使用谷歌應用腳本解決我的谷歌郵件問題


更新:只有特定的附件需要移除 rest 的結構和附件需要相同。 提供的解決方案刪除所有附件!

問題:

我每天都從我的供應商和客戶那里收到帶有 pdf 附件的 email,有些是使用自動系統發送給我的,有些是通過手動發送給我的,其中一些 email 的附件名為“無名”或讀取。 我正在使用自動應用程序下載此 pdf 附件,當有 email 完全忽略的“無名”附件時,我每天都會錯過一些 pdf


計划解決方案:

使用谷歌應用程序腳本,我嘗試捕獲“無名”附件並僅刪除email 內容的文件 rest 和 pdf 需要相同。

我已經設法實現代碼來捕獲特定的 email 發送無名附件,如果他們未讀然后檢查附件並刪除無名


我需要建議的地方:如何刪除選定的附件?

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());

              }       
   }
  }
 }
}

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 高級服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM