如何通过GoggleScript下载我的电子邮件

时间:2019-07-02 12:16:36

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

我必须从我的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();

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

有人给我小费吗?

谢谢

2 个答案:

答案 0 :(得分: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);
      }
  }
}

感谢您的帮助。

问候

答案 1 :(得分:0)

要发送电子邮件,您首先必须获取每个电子邮件并将它们转换为内容类型为“ 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