【问题标题】:How I can download my eMail per GoggleScript如何通过 GoggleScript 下载我的电子邮件
【发布时间】:2019-11-13 02:09:30
【问题描述】:

我必须从我的 GMail 帐户下载大量电子邮件(大约 1000 件)到我们的文件管理器,并且只能通过浏览器访问。

这是我的起始脚本:

function myeMailExportToEML() {
  var threads = GmailApp.search('Label:TestExportEML');  
  GmailApp.markThreadsRead(threads);
  
  for (var i=0; i< threads.length; i++) {
    var myID = threads[i].getId();
    var mySubject = GmailApp.getMessageById(myID).getSubject();

    ??????????????????
    ??????????????????
    ??????????????????
  }
}

有人给我小费吗?

谢谢

【问题讨论】:

标签: google-apps-script google-api gmail-api


【解决方案1】:

我找到了解决办法:

function myExportToGoogleDrive1() {
  var threads = GmailApp.search("label:TestExportEML");  
  GmailApp.markThreadsRead(threads);
  Logger.log(threads)
  var messagesArray = []     
  
  var newFolder = DriveApp.createFolder("dddddddddddddddddddddd").getId();

  for (var i=0; i< threads.length; i++) {
    var messages = threads[i].getMessages();

      for (var j=0; j< messages.length; j++) {

        var myID = messages[j].getId();
        var msg = GmailApp.getMessageById(myID);
        var msgRaw = msg.getRawContent();

        var msgBlob = Utilities.newBlob(msgRaw, 'message/rfc822', 'example.eml');
        
        var ssss = DriveApp.getFolderById(newFolder).createFile(msgBlob);
        var filename = GmailApp.getMessageById(myID).getSubject();
        
        ssss.setName(filename);
      }
  }
}

感谢您的帮助。

问候

【讨论】:

    【解决方案2】:

    要发送您的电子邮件,您首先必须获取每个电子邮件并将它们转换为内容类型为“message/rfc822”(这是 .eml 文件的 mime 类型)的 blob 对象[1]:

    在您的代码中,您将获取每个线程的第一条消息,因为 threadID 与该线程中第一条消息的 messageID 相同,但如果线程有更多消息(例如回复),则不会找到他们。您需要为每个线程使用 getMessages() 函数 [2] 以获取所有消息。

    获取Message对象后,可以对每条消息使用getRawContent函数[3],以获取编码后的数据字符串。使用这个字符串,我们可以创建一个 Blob 对象 [4],它将是 .eml 文件。

    我无法判断您从文件服务器端获得的访问权限,这就是为什么我开发了这两种不同的方法来解决您下载/发送 .eml 文件的问题,具体取决于最方便的方式你:

    为了测试 .eml blob 文件是否正确创建,我使用 sendEmail 函数 [5] 将其作为附件发送给自己。

    另一种方法是将所有文件存储在一个数组 (messagesArray) 中并获取服务器的 Url 以通过 POST 发送数组。在这种情况下使用 UrlFetchApp.fetch() 函数 [6]。

    以下是两个选项的完整代码:

    function myeMailExportToEML() {
    
      var threads = GmailApp.search('label:TestExportEML’);  
      GmailApp.markThreadsRead(threads);
      Logger.log(threads)
      var messagesArray = []     
    
      for (var i=0; i< threads.length; i++) {
        var messages = threads[i].getMessages();
    
          for (var j=0; j< messages.length; j++) {
    
            var myID = messages[j].getId();
            var msg = GmailApp.getMessageById(myID);
            var msgRaw = msg.getRawContent();
    
            var msgBlob = Utilities.newBlob(msgRaw, 'message/rfc822', 'example.eml');
    
            //Sends email with the .eml file attached
            GmailApp.sendEmail('RECIPIENT EMAIL', 'Attachment example', 'Please see the attached file.', {
              attachments: msgBlob,
              name: 'Automatic Emailer Script'
            })   
    
        messagesArray.push(msgBlob);                          
          }
      }
    
        //make a post request to the server sending the .eml file in the request body(I didn't test this part)
       var formData = {
              'mail': messagesArray
       };
       var options = {
              'method' : 'post',
              'payload' : formData
            };
       UrlFetchApp.fetch('https://example.com/post', options);    
    }
    

    [1]https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types

    [2]https://developers.google.com/apps-script/reference/gmail/gmail-thread#getMessages()

    [3]https://developers.google.com/apps-script/reference/gmail/gmail-message#getRawContent()

    [4]https://developers.google.com/apps-script/reference/utilities/utilities#newBlob(String,String,String)

    [5]https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail(String,String,String,Object)

    [6]https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

    【讨论】:

    • 您好,感谢您的回答 - 您的脚本运行良好,并向我发送一封包含 EML 文件的电子邮件。但是我在哪里可以找到我电脑上的 EML 文件?我的目标是保存 EML 文件。
    • 哦,我以为“fileser”是指文件服务器。使用 Blob,您可以将文件上传到驱动器并从那里下载它们。其他选项是压缩所有 blob 文件并使用此压缩 blob 发送电子邮件,然后从 gmail 下载它们。检查 zip() 函数:developers.google.com/apps-script/reference/utilities/…
    • 你好,对我来说有点奇怪。我检查了如何将文件放入 blob 中。但是我如何将 blob 下载到例如我的本地硬盘。你有一个简单的脚本示例给我吗?
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2010-11-20
    • 2014-03-18
    • 2020-07-16
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多