从 Gmail 获取邮件发件人地址 API
Get message sender address from Gmail API
让我先声明我不是 JS 开发人员,甚至不是 Web 开发人员,所以请耐心等待!我正在尝试创建一个 gs 脚本,用于删除超过 n 个月且具有特定标签且来自给定发件人的邮件。
我想我已经记下了,但是 Gmail API getFrom()
方法似乎 return 发件人地址的格式 "First Last" <address@mail.tld>
而不仅仅是 address@mail.tld
.目前我可以解决这个问题,因为我知道这些信息,但是有没有更好的方法可以让代码 仅 在实际的电子邮件地址上运行?
我当前的代码:
function auto_delete_emails() {
var label = GmailApp.getUserLabelByName("foo");
var sender = "\"Foo Bar\" <info@foo.bar>";
if (label != null) {
var delayDays = 30
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() - delayDays);
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = GmailApp.getMessagesForThread(threads[i]);
var from = messages[0].getFrom();
if (from == sender) {
if (threads[i].getLastMessageDate < maxDate) {
threads[i].moveToTrash();
}
}
}
}
}
我看到一个问题使用正则表达式来解决这个问题,但我几乎不了解正则表达式,更不用说如何在这种情况下应用或示例如何工作(或没有工作!)。
也欢迎就此代码提出其他改进建议。
我认为从 From
-header 中提取电子邮件地址是最安全的选择。你可以使用例如this great RegEx:
function extractEmailAddress(header) {
return header.match(/[^@<\s]+@[^@\s>]+/)[0];
}
function auto_delete_emails() {
var label = GmailApp.getUserLabelByName("foo");
var sender = extractEmailAddress("\"Foo Bar\" <info@foo.bar>");
if (label != null) {
var delayDays = 30;
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() - delayDays);
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = GmailApp.getMessagesForThread(threads[i]);
var from = extractEmailAddress(messages[0].getFrom());
if (from === sender) {
if (threads[i].getLastMessageDate < maxDate) {
threads[i].moveToTrash();
}
}
}
}
}
让我先声明我不是 JS 开发人员,甚至不是 Web 开发人员,所以请耐心等待!我正在尝试创建一个 gs 脚本,用于删除超过 n 个月且具有特定标签且来自给定发件人的邮件。
我想我已经记下了,但是 Gmail API getFrom()
方法似乎 return 发件人地址的格式 "First Last" <address@mail.tld>
而不仅仅是 address@mail.tld
.目前我可以解决这个问题,因为我知道这些信息,但是有没有更好的方法可以让代码 仅 在实际的电子邮件地址上运行?
我当前的代码:
function auto_delete_emails() {
var label = GmailApp.getUserLabelByName("foo");
var sender = "\"Foo Bar\" <info@foo.bar>";
if (label != null) {
var delayDays = 30
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() - delayDays);
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = GmailApp.getMessagesForThread(threads[i]);
var from = messages[0].getFrom();
if (from == sender) {
if (threads[i].getLastMessageDate < maxDate) {
threads[i].moveToTrash();
}
}
}
}
}
我看到一个问题使用正则表达式来解决这个问题,但我几乎不了解正则表达式,更不用说如何在这种情况下应用或示例如何工作(或没有工作!)。
也欢迎就此代码提出其他改进建议。
我认为从 From
-header 中提取电子邮件地址是最安全的选择。你可以使用例如this great RegEx:
function extractEmailAddress(header) {
return header.match(/[^@<\s]+@[^@\s>]+/)[0];
}
function auto_delete_emails() {
var label = GmailApp.getUserLabelByName("foo");
var sender = extractEmailAddress("\"Foo Bar\" <info@foo.bar>");
if (label != null) {
var delayDays = 30;
var maxDate = new Date();
maxDate.setDate(maxDate.getDate() - delayDays);
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = GmailApp.getMessagesForThread(threads[i]);
var from = extractEmailAddress(messages[0].getFrom());
if (from === sender) {
if (threads[i].getLastMessageDate < maxDate) {
threads[i].moveToTrash();
}
}
}
}
}