早上好
我是javascript,google脚本和正则表达式的新手。我在https://www.labnol.org/internet/gmail-bounced-email-report/29209/的Amit Agarwal处找到了很好的信息,但是我很难确定我特别需要保留或需要更新的内容。我不想使用退回邮件程序守护程序地址,而是想从我的gmail帐户中的两个标签(MinervaBounce和MILSBounce)中抓取退回邮件,并能够区分邮件来自哪一个。任何帮助将不胜感激。
以下是退回邮件中需要的项目:
以下是退回邮件文本的示例:
原始消息是在2018年7月31日星期二07:16:38 -0400收到的 来自本地主机[127.0.0.1]
-----以下地址存在永久性致命错误-----
(原因:554 5.7.1
-----会话记录如下----- ...与mx.gwi.net.cust.b.hostedemail.com交谈时:
数据 <<< 554 5.7.1
:收件人地址被拒绝:用户margolulubelle@gwi.net不存在 554 5.0.0服务不可用 <<< 554 5.5.1错误:没有有效的收件人
----------转发的邮件---------- 来自:library.noreply@library.org 至:margolulubelle@gwi.net 抄送: 密件副本: 日期:2018年7月31日星期二07:16:38 -0400 主题:您图书馆的发行通知
07-31-18 07:16 PM
Fremont Memorial Library
555 Fremont Ave
Freedom, ME 04941
Margo Madeup-Name
555 Dartmouth Ln
Dixfield, ME 04224
******************************************************************
LIBRARY REQUEST / HOLD CANCELLED
******************************************************************
YOUR REQUEST FOR THE FOLLOWING MATERIAL COULD NOT BE FILLED, OR THE
HOLD WAS FULFILLED, BUT NOT PICKED UP IN TIME. CONTACT YOUR LIBRARY
TO PURSUE OTHER AVENUES TO OBTAIN OR RE-REQUEST THE ITEM.
作者: 蓝绿黄红 致电:FIC BLU 条形码:3400599999 Fremont PL儿童房R
88:1
这是阿米特(Amit)的代码:
/*
* Gmail Bounced Emails
* @labnol December 14, 2016
* Written by Amit Agarwal
* email: amit@labnol.org
* twitter: @labnol
* web: https://ctrlq.org
*/
function onOpen(e) {
SpreadsheetApp.getUi().createMenu(" Gmail")
.addItem("Bounce Report", "b_")
.addItem("Help and Support", "h_")
.addToUi();
h_(false);
}
function b_(){var e=SpreadsheetApp.getActiveSheet();e.getRange(2,1,e.getLastRow(),e.getLastColumn()).clearContent();
var t="in:anywhere from:(mailer-daemon@google.com OR mailer-daemon@googlemail.com)",a='=HYPERLINK("URL";"View")',o=0;GmailApp.search(t,0,500).forEach(function(t){t.getMessages().forEach(function(r){if(r.getFrom().indexOf("mailer-daemon")!==-1){var i=r.getPlainBody(),l=i.match(/Delivery to[\s\S]+?(\S+\@\S+)\s([\s\S]+?)-----/)||i.match(/Your message wasn't delivered to (\S+\@\S+) ([\s\S]+)/);
if(l){var n=l[2].match(/The response.+:\s+(.+)/)||l[2].match(/The error.+:\s+(.+)/)||l[2].match(/Technical details.+:\s+(.+)/)||["",l[2].trim()];o++,e.appendRow([t.getLastMessageDate(),l[1],n[1].replace(/ (Please|Learn|See).*$/,""),a.replace("URL",t.getPermalink()),t.getFirstMessageSubject()])}}}),Utilities.sleep(100)}),0===o&&(o="ZERO"),h_(o)}
function h_(e){var t=HtmlService.createTemplateFromFile("help");t.report=e?"The Google Script found COUNT bounced emails in your mailbox.".replace("COUNT",e):"Please go to the Gmail menu and select Bounce Report to get started.";
var a=t.evaluate().setTitle("Bounce Report for Gmail").setWidth(460).setHeight(225);SpreadsheetApp.getActiveSpreadsheet().show(a)}
谢谢你, 林恩
答案 0 :(得分:0)
只需根据您的需要调整查询,它可能看起来像这样:
from:(mailer-daemon@googlemail.com OR mailer-daemon@google.com) AND (label:"SO Review" OR label:"Sample Wala")
这将从多个标签中获取退回电子邮件({OR
运算符需要使其与任何标签匹配,而不要求在电子邮件中同时找到两个标签)。
使用Users.messages: list
和查询来获取与查询匹配的messageID
的列表,然后使用threadID
获取原始消息,然后再发送失败。最后,使用Users.messages
查看有关原始邮件的详细信息。
参考文献:
https://developers.google.com/gmail/api/v1/reference/users/messages/list https://webapps.stackexchange.com/questions/10581/filtering-based-on-multiple-labels-in-gmail