Javascript 从Gmail线程收集唯一的电子邮件地址
我对Google Apps脚本不熟悉,我正在尝试为电子表格创建一个脚本,在该脚本中,我将在工作表中存储Javascript 从Gmail线程收集唯一的电子邮件地址,javascript,arrays,google-apps-script,google-sheets,gmail,Javascript,Arrays,Google Apps Script,Google Sheets,Gmail,我对Google Apps脚本不熟悉,我正在尝试为电子表格创建一个脚本,在该脚本中,我将在工作表中存储.getFrom()方法找到的所有电子邮件地址,并忽略相同的电子邮件地址,以便我只获得一个电子邮件地址,而不是多次。到目前为止,存储是成功的,但忽略相同的电子邮件是行不通的。我在工作表的专栏里多次收到相同的电子邮件 这是我的密码: var n=threads.length; var messages=thread.getMessages(); var getf
.getFrom()
方法找到的所有电子邮件地址,并忽略相同的电子邮件地址,以便我只获得一个电子邮件地址,而不是多次。到目前为止,存储是成功的,但忽略相同的电子邮件是行不通的。我在工作表的专栏里多次收到相同的电子邮件
这是我的密码:
var n=threads.length;
var messages=thread.getMessages();
var getfrom = 0;
var allMails = [];
for (var i=0; i<n; i++)
{
for (var j=0; j<messages.length; j++)
{
var message=messages[j];
getfrom = message.getFrom();
var first_name = getfrom.substring(0, getfrom.indexOf(" "));
var last_name = getfrom.substring(getfrom.indexOf(" ")+1, getfrom.indexOf(" <"));
var email_address = 0;
if (first_name == '' && last_name == '')
{
email_address = getfrom;
} else {
email_address = getfrom.substring(getfrom.indexOf("<")+1, getfrom.indexOf(">"));
}
// This is how I check if I already have the email address or not
if (email_address == my_email || email_address[j] == email_address[j-1])
{
continue;
}
}
allMails.push([email_address]);
}
Logger.log(allMails);
sheet1.getRange(2, 3, n, 1).setValues(allMails);
Browser.msgBox("Operation complete");
var n=threads.length;
var messages=thread.getMessages();
var-getfrom=0;
var-allMails=[];
对于(var i=0;i,您需要交叉检查您的AllMail数组中的给定电子邮件地址,以确保它不在列表中,但是您无法直接检查AllMail,因为它是一个二维数组
我添加一个一维数组纯粹是为了交叉检查
var n=threads.length;
var messages=thread.getMessages();
var getfrom = 0;
var allMails = [];
var cross_check = [];
for (var i=0; i<n; i++)
{
for (var j=0; j<messages.length; j++)
{
var message=messages[j];
getfrom = message.getFrom();
var first_name = getfrom.substring(0, getfrom.indexOf(" "));
var last_name = getfrom.substring(getfrom.indexOf(" ")+1, getfrom.indexOf(" <"));
var email_address = 0;
if (first_name == '' && last_name == '')
{
email_address = getfrom;
} else {
email_address = getfrom.substring(getfrom.indexOf("<")+1, getfrom.indexOf(">"));
}
if(email_address != my_email && cross_check.indexOf(email_address) == -1){
cross_check.push(email_address);
allMails.push([email_address]);
}
}
}
Logger.log(allMails);
sheet1.getRange(2, 3, n, 1).setValues(allMails);
Browser.msgBox("Operation complete");
var n=threads.length;
var messages=thread.getMessages();
var-getfrom=0;
var-allMails=[];
var交叉检查=[];
对于(var i=0;i您可以在将电子邮件添加到列表之前确保唯一性,或者先构建完整列表,然后删除重复的邮件
选项1:预过滤器
本例构建了一个一维地址数组;因为它是一个简单数组,所以我们可以使用JavaScript内置的.indexOf()方法检查唯一性。检查完所有线程后,使用另一个内置数组,map()将该简单数组转换为二维数组以存储在电子表格中
。但在此之前,数组会被排序-因为我们可以。您可能需要执行其他筛选,例如删除“无回复”地址
函数getUniqueFromAddresses1(){
var my_email=Session.getActiveUser().getEmail();
var threads=GmailApp.getInboxThreads();
var n=螺纹长度;
var-allMails=[];
对于(var i=0;i还检查-它将Gmail的电子邮件地址保存在谷歌电子表格中。除了检查整个allMais数组中的新电子邮件是否存在,如果不存在,则推送,我如何检查AllMail
数组中的所有邮件并忽略/删除相同的电子邮件,然后推送您的问题中的de不是一个数组;如果代码的功能足以重现您的问题,它将帮助人们贡献他们的时间来帮助您。看起来不错-但OP也排除了他们发送的消息。此检查不能做到这一点。此外,与其使用两个数组,不如只使用一个数组,然后将其转换为setValues()的二维数组
?很好的回答:检查我的电子邮件。决定建议使用第二个数组,因为这是对现有代码的最小更改,而我往往就是这样懒惰。正如你所看到的,我有点喜欢这个问题!:)@CameronRoberts,非常感谢您的回复。这看起来很简单,在日志中我只收到了证明其有效的独特电子邮件,但出于某些原因,它没有保存在我的工作表中。知道为什么吗?非常感谢您花时间发布此答案。我也会检查此答案,但我正在寻找简单的答案,所以我将首先尝试Robert的代码!