我在使用 Google Apps 脚本自动从 Gmail 收件箱中的特定电子邮件检索 .eml 文件附件时遇到问题。我的脚本旨在搜索具有特定主题行的电子邮件、记录消息并识别存在的任何 .eml 附件。但是,尽管确认电子邮件包含 .eml 文件,但我的脚本似乎无法正确找到或读取它们。
我在整个脚本中添加了日志记录语句来监视正在处理的消息和附件,但我没有收到与 .eml 附件相关的任何输出。这让我相信我访问或过滤附件的方式可能存在问题。
我需要帮助来解决此问题,以确保我可以有效地检索和阅读目标电子邮件中的 .eml 附件的内容。
function findSpecificEmail() {
var threads = GmailApp.search('subject:"Your Email Subject Here"'); // Change the subject to match your email
var messages = GmailApp.getMessagesForThreads(threads);
for (var i = 0; i < messages.length; i++) {
for (var j = 0; j < messages[i].length; j++) {
var message = messages[i][j];
var attachments = message.getAttachments();
for (var k = 0; k < attachments.length; k++) {
var attachment = attachments[k];
Logger.log('Found attachment: ' + attachment.getName() + ' of type ' + attachment.getContentType());
if (attachment.getName().endsWith('.eml')) {
var emlContent = attachment.getDataAsString();
Logger.log('EML Content: ' + emlContent);
}
}
}
}
}
我认为当eml文件
message/rfc822
附加到电子邮件时,似乎当Gmail服务(GmailApp)检索电子邮件时,getAttachments()
返回空。我猜这可能是您当前问题的原因。如果您想使用显示脚本检索电子邮件的内容,可以通过 message.getBody()
检索。但是,在这种情况下,将检索 HTML 内容。
如果你想检索原始eml文件作为附件文件,我猜Gmail API可能可以使用。当这反映在你的脚本中时,下面的修改如何?
在使用此脚本之前,请在高级 Google 服务中启用 Gmail API。
function findSpecificEmail() {
var threads = GmailApp.search('subject:"Your Email Subject Here"'); // Change the subject to match your email
var messages = GmailApp.getMessagesForThreads(threads);
for (var i = 0; i < messages.length; i++) {
for (var j = 0; j < messages[i].length; j++) {
var message = messages[i][j];
// --- I modified the below script.
const messageId = message.getId();
const obj = Gmail.Users.Messages.get("me", messageId).payload.parts.find(e => e.body.attachmentId);
if (obj) {
const { filename, mimeType, body: { attachmentId } } = obj;
const { data } = Gmail.Users.Messages.Attachments.get("me", messageId, attachmentId);
Logger.log(`Found attachment: "${filename}" of type "${mimeType}"`);
if (filename.endsWith('.eml')) {
const emlContent = Utilities.newBlob(data).getDataAsString();
Logger.log('EML Content: ' + emlContent);
}
}
// ---
}
}
}
运行此脚本时,Gmail API 会检索邮件和附件文件。并且,搜索附件ID。当附件文件的文件名包含
.eml
时,eml文件的内容将显示在日志中。