如何避免在 Gmail 中自动转发重复的电子邮件
How to avoid auto-forwarding duplicate emails in Gmail
我公司有3个部门共用一个Gmail地址,每个部门处理不同的工作。
当我们的客户发送电子邮件到共享地址时,他们将首先由行政办公室的负责人阅读,然后手动转发到3个部门的3个电子邮件地址进行处理。这个过程太辛苦了。此外,此人可能会忘记转发电子邮件,当此人离开她的隔间时,将不会转发电子邮件。
我们希望通过 Google 脚本自动转发来代替手动过程。电子邮件将根据每个部门的客户自动转发。比方说,如果发件人的电子邮件地址包含“@company_A.com”,它将被自动转发到部门 1.
我们认为我们可以通过使用 Google 脚本来实现这一点,这样脚本将获取发件人的地址,检查它是否包含某些字符串,并转发符合条件的电子邮件。我们想在收件箱中获取 50 条最新消息并查看。
但是,我们遇到了一个问题:如果每次查看50条最新消息,如何避免转发上次已经转发的消息。
感谢您的任何建议。
最简单的方法是使用要添加到已传输邮件的标签。
我最近发布了这样一个脚本,它完全可以满足您的要求,几乎...
我建议不要使用最后 50 条消息来处理日期标准,这似乎更合乎逻辑且耗时更少。
您会在我展示的代码中看到我在 gmail 中使用高级搜索,this tool is quite powerful (doc here) 并且您可以轻松地根据您的情况调整它。
问题:Gmail not forwarding some messages
代码:
function transferEmails() {
Logger.clear();
var trfTo = "theNewRecipentAddress@domain.com";
var trf = GmailApp.getUserLabelByName('transférés');
if(trf==null){
trf = GmailApp.createLabel('transférés');
}
var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy/MM/dd")
// note the minus sign before label to exclude threads having this label
var threadsToday = GmailApp.search("after:"+today+" -label:transférés in:inbox" );
Logger.log("today day = "+new Date().getDate());
Logger.log('Threads today : '+threadsToday.length);
var count = 0;
for(var n=0;n<threadsToday.length;n++){
threadsToday[n].addLabel(trf);
var msg = threadsToday[n].getMessages();
if(msg==null){continue};
for(var m=0;m<msg.length;m++){
if(msg[m].isInTrash()||msg[m].getFrom().indexOf(Session.getActiveUser().getEmail())>-1){continue};
Logger.log("msg from : "+msg[m].getFrom());
count++;
var ori = msg[m].getFrom();
var sujet = msg[m].getSubject();
Logger.log('this thread ('+sujet+') has '+msg.length+' messages');
if(msg[m].getDate().getDate()==new Date().getDate()){ // if message was sent today
Logger.log(sujet+' du '+msg[m].getDate()+' >> transfert message Nr '+count+'\n\n');
try{
msg[m].forward(trfTo,{name:ori,replyTo:ori});
}catch(err){
GmailApp.sendEmail(Session.getActiveUser().getEmail(), "Erreur de transfert, message de "+ori+" avec le sujet "+sujet
+" n'a pas été transféré","Erreur de transfert, message de "+ori+" avec le sujet "+sujet+" n'a pas été transféré") ERROR MSG : "+err;
}
}else{
Logger.log(sujet+' du '+msg[m].getDate()+' >> pas transféré');
}
}
}
GmailApp.sendEmail("myAddressOusideOfDomain@gmail.com","log transfert", Logger.getLog());// I use my address to keep an eye on what happens
}
下面是我使用日期条件和标签自动转发消息的代码。我还想问问有没有什么方法可以缩短转发条件(我用的是indexOf方法,必须指定转发的每个条件:要么包含"companyA.com"要么包含"companyB.com"要么包含"companyC.com"
function Auto_forward() {
var labelChecked = GmailApp.getUserLabelByName("test_checked");
var threadsToCheck = GmailApp.search('in:inbox -label:test_checked newer_than:10h');
for (var i=0; i<threadsToCheck.length; i++) {
var message = threadsToCheck[i].getMessages()[0];
var addressToCheck = message.getFrom();
var subject = message.getSubject();
if (addressToCheck.toLowerCase().indexOf("@companyA.com") > -1 || addressToCheck.toLowerCase().indexOf("@companyB.com") > -1)
{
message.forward("email@example.com", {subject: subject})}
threadsToCheck[i].addLabel(labelChecked);
}
}
有时候,最好的节目就是没有节目。
GMail 的过滤器已经能够识别符合您描述的条件的传入邮件。参考Advanced Search。根据您的需要,from:
搜索允许匹配子字符串,包括涵盖整个公司的域:
from:(@company_A.com)
由于过滤器仅适用于收件箱,任何首先被其他过滤器重定向或自动移动到垃圾邮件 文件夹的邮件都将被过滤器遗漏。这可以通过确保您的过滤器顺序设置为避免此类冲突来避免,并且您感兴趣的域在您允许的发件人列表中。
如果您担心自己可能错过了此类消息,可以随时在 UI 中搜索:
(in:inbox OR in:spam) from:(@company_A.com)
我公司有3个部门共用一个Gmail地址,每个部门处理不同的工作。
当我们的客户发送电子邮件到共享地址时,他们将首先由行政办公室的负责人阅读,然后手动转发到3个部门的3个电子邮件地址进行处理。这个过程太辛苦了。此外,此人可能会忘记转发电子邮件,当此人离开她的隔间时,将不会转发电子邮件。
我们希望通过 Google 脚本自动转发来代替手动过程。电子邮件将根据每个部门的客户自动转发。比方说,如果发件人的电子邮件地址包含“@company_A.com”,它将被自动转发到部门 1.
我们认为我们可以通过使用 Google 脚本来实现这一点,这样脚本将获取发件人的地址,检查它是否包含某些字符串,并转发符合条件的电子邮件。我们想在收件箱中获取 50 条最新消息并查看。
但是,我们遇到了一个问题:如果每次查看50条最新消息,如何避免转发上次已经转发的消息。
感谢您的任何建议。
最简单的方法是使用要添加到已传输邮件的标签。
我最近发布了这样一个脚本,它完全可以满足您的要求,几乎...
我建议不要使用最后 50 条消息来处理日期标准,这似乎更合乎逻辑且耗时更少。 您会在我展示的代码中看到我在 gmail 中使用高级搜索,this tool is quite powerful (doc here) 并且您可以轻松地根据您的情况调整它。
问题:Gmail not forwarding some messages
代码:
function transferEmails() {
Logger.clear();
var trfTo = "theNewRecipentAddress@domain.com";
var trf = GmailApp.getUserLabelByName('transférés');
if(trf==null){
trf = GmailApp.createLabel('transférés');
}
var today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy/MM/dd")
// note the minus sign before label to exclude threads having this label
var threadsToday = GmailApp.search("after:"+today+" -label:transférés in:inbox" );
Logger.log("today day = "+new Date().getDate());
Logger.log('Threads today : '+threadsToday.length);
var count = 0;
for(var n=0;n<threadsToday.length;n++){
threadsToday[n].addLabel(trf);
var msg = threadsToday[n].getMessages();
if(msg==null){continue};
for(var m=0;m<msg.length;m++){
if(msg[m].isInTrash()||msg[m].getFrom().indexOf(Session.getActiveUser().getEmail())>-1){continue};
Logger.log("msg from : "+msg[m].getFrom());
count++;
var ori = msg[m].getFrom();
var sujet = msg[m].getSubject();
Logger.log('this thread ('+sujet+') has '+msg.length+' messages');
if(msg[m].getDate().getDate()==new Date().getDate()){ // if message was sent today
Logger.log(sujet+' du '+msg[m].getDate()+' >> transfert message Nr '+count+'\n\n');
try{
msg[m].forward(trfTo,{name:ori,replyTo:ori});
}catch(err){
GmailApp.sendEmail(Session.getActiveUser().getEmail(), "Erreur de transfert, message de "+ori+" avec le sujet "+sujet
+" n'a pas été transféré","Erreur de transfert, message de "+ori+" avec le sujet "+sujet+" n'a pas été transféré") ERROR MSG : "+err;
}
}else{
Logger.log(sujet+' du '+msg[m].getDate()+' >> pas transféré');
}
}
}
GmailApp.sendEmail("myAddressOusideOfDomain@gmail.com","log transfert", Logger.getLog());// I use my address to keep an eye on what happens
}
下面是我使用日期条件和标签自动转发消息的代码。我还想问问有没有什么方法可以缩短转发条件(我用的是indexOf方法,必须指定转发的每个条件:要么包含"companyA.com"要么包含"companyB.com"要么包含"companyC.com"
function Auto_forward() {
var labelChecked = GmailApp.getUserLabelByName("test_checked");
var threadsToCheck = GmailApp.search('in:inbox -label:test_checked newer_than:10h');
for (var i=0; i<threadsToCheck.length; i++) {
var message = threadsToCheck[i].getMessages()[0];
var addressToCheck = message.getFrom();
var subject = message.getSubject();
if (addressToCheck.toLowerCase().indexOf("@companyA.com") > -1 || addressToCheck.toLowerCase().indexOf("@companyB.com") > -1)
{
message.forward("email@example.com", {subject: subject})}
threadsToCheck[i].addLabel(labelChecked);
}
}
有时候,最好的节目就是没有节目。
GMail 的过滤器已经能够识别符合您描述的条件的传入邮件。参考Advanced Search。根据您的需要,from:
搜索允许匹配子字符串,包括涵盖整个公司的域:
from:(@company_A.com)
由于过滤器仅适用于收件箱,任何首先被其他过滤器重定向或自动移动到垃圾邮件 文件夹的邮件都将被过滤器遗漏。这可以通过确保您的过滤器顺序设置为避免此类冲突来避免,并且您感兴趣的域在您允许的发件人列表中。
如果您担心自己可能错过了此类消息,可以随时在 UI 中搜索:
(in:inbox OR in:spam) from:(@company_A.com)