我如何根据 GoggleScript 下载我的电子邮件
How I can download my eMail per GoggleScript
我必须从我的 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();
??????????????????
??????????????????
??????????????????
}
}
有人给我小费吗?
谢谢
要发送您的电子邮件,您首先必须获取每个电子邮件并将它们转换为具有 content-type“message/rfc822”(这是 .eml 文件的 mime 类型)的 blob 对象 [1 ]:
在您的代码中,您正在获取每个线程的第一条消息,因为 threadID 与该线程中第一条消息的 messageID 相同,但如果线程有更多消息(例如回复),它会获胜找到他们。您需要为每个线程使用 getMessages() 函数 [2] 以获得所有消息。
获取Message对象后,可以使用getRawContent函数[3]对每条消息获取编码后的数据字符串。使用此字符串,我们可以创建一个 Blob 对象 [4],这将是 .eml 文件。
我无法判断您从文件服务器端访问的类型,这就是为什么我开发了这两种不同的方法来解决您对 download/send .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()
[6]https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
我找到了解决方法:
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);
}
}
}
感谢您的帮助。
问候
我必须从我的 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();
??????????????????
??????????????????
??????????????????
}
}
有人给我小费吗?
谢谢
要发送您的电子邮件,您首先必须获取每个电子邮件并将它们转换为具有 content-type“message/rfc822”(这是 .eml 文件的 mime 类型)的 blob 对象 [1 ]:
在您的代码中,您正在获取每个线程的第一条消息,因为 threadID 与该线程中第一条消息的 messageID 相同,但如果线程有更多消息(例如回复),它会获胜找到他们。您需要为每个线程使用 getMessages() 函数 [2] 以获得所有消息。
获取Message对象后,可以使用getRawContent函数[3]对每条消息获取编码后的数据字符串。使用此字符串,我们可以创建一个 Blob 对象 [4],这将是 .eml 文件。
我无法判断您从文件服务器端访问的类型,这就是为什么我开发了这两种不同的方法来解决您对 download/send .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()
[6]https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
我找到了解决方法:
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);
}
}
}
感谢您的帮助。
问候