Google 脚本 - 从 Gmail 获取数据到 Sheet
Google Script - get data from Gmail into Sheet
我一直在 SO 和 Google 上四处寻找,但我找不到任何有用的东西。
所以当我 运行 下面的代码时,我在图像上得到了结果。
我想从 newest/most 最近 thread
具有特定标签的邮件中提取数据。
但是,在我的 Gmail
中,我只有 "Action"-label
下用粗体突出显示的 3 封邮件。
其他邮件已被删除,因此它们在垃圾箱中,但仍然带有 "Action" 标签。
我只想显示我拥有 "Action"-label
的邮件 - 这意味着我只想要最新的 thread
time/date、主题行和 ID,所以我可以为该邮件创建 link。
function myFunction() {
var ss = SpreadsheetApp.getActiveSheet();
var query = "label:action -label:trash -label:action-done -from:me";
var threads = GmailApp.search(query);
for (var i = 0; i < threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++)
{
var mId = messages[j].getId()
var from = messages[j].getFrom();
var cc = messages[j].getCc();
var time = messages[j].getDate()
var sub = messages[j].getSubject();
ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId])
}
}
}
}
最近是什么意思?
在搜索中添加 newer_than:3d 怎么样?
您可以在自己的 Gmail 帐户中测试搜索,当它执行您想要的操作时,只需将其粘贴到查询中即可。
所以我设法通过找到数组中的最大索引来解决它。
我已经评论了代码,所以它可以帮助别人。谢谢大家
function myFunction() {
// Use sheet
var ss = SpreadsheetApp.getActiveSheet();
// Gmail query
var query = "label:support -label:trash -label:support-done -from:me";
// Search in Gmail, bind to array
var threads = GmailApp.search(query);
// Loop through query results
for (var i = 0; i < threads.length; i++)
{
// Get messages in thread, add to array
var messages = threads[i].getMessages();
// Used to find max index in array
var max = messages[0];
var maxIndex = 0;
// Loop through array to find maxIndexD = most recent mail
for (var j = 0; j < messages.length; j++) {
if (messages[j] > max) {
maxIndex = j;
max = messages[j];
}
}
// Find data
var mId = messages[maxIndex].getId() // ID used to create mail link
var from = messages[maxIndex].getFrom();
var cc = messages[maxIndex].getCc();
var time = threads[i].getLastMessageDate()
var sub = messages[maxIndex].getSubject();
// Write data to sheet
ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId])
}
}
我一直在 SO 和 Google 上四处寻找,但我找不到任何有用的东西。
所以当我 运行 下面的代码时,我在图像上得到了结果。
我想从 newest/most 最近 thread
具有特定标签的邮件中提取数据。
但是,在我的 Gmail
中,我只有 "Action"-label
下用粗体突出显示的 3 封邮件。
其他邮件已被删除,因此它们在垃圾箱中,但仍然带有 "Action" 标签。
我只想显示我拥有 "Action"-label
的邮件 - 这意味着我只想要最新的 thread
time/date、主题行和 ID,所以我可以为该邮件创建 link。
function myFunction() {
var ss = SpreadsheetApp.getActiveSheet();
var query = "label:action -label:trash -label:action-done -from:me";
var threads = GmailApp.search(query);
for (var i = 0; i < threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++)
{
var mId = messages[j].getId()
var from = messages[j].getFrom();
var cc = messages[j].getCc();
var time = messages[j].getDate()
var sub = messages[j].getSubject();
ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId])
}
}
}
}
最近是什么意思?
在搜索中添加 newer_than:3d 怎么样? 您可以在自己的 Gmail 帐户中测试搜索,当它执行您想要的操作时,只需将其粘贴到查询中即可。
所以我设法通过找到数组中的最大索引来解决它。
我已经评论了代码,所以它可以帮助别人。谢谢大家
function myFunction() {
// Use sheet
var ss = SpreadsheetApp.getActiveSheet();
// Gmail query
var query = "label:support -label:trash -label:support-done -from:me";
// Search in Gmail, bind to array
var threads = GmailApp.search(query);
// Loop through query results
for (var i = 0; i < threads.length; i++)
{
// Get messages in thread, add to array
var messages = threads[i].getMessages();
// Used to find max index in array
var max = messages[0];
var maxIndex = 0;
// Loop through array to find maxIndexD = most recent mail
for (var j = 0; j < messages.length; j++) {
if (messages[j] > max) {
maxIndex = j;
max = messages[j];
}
}
// Find data
var mId = messages[maxIndex].getId() // ID used to create mail link
var from = messages[maxIndex].getFrom();
var cc = messages[maxIndex].getCc();
var time = threads[i].getLastMessageDate()
var sub = messages[maxIndex].getSubject();
// Write data to sheet
ss.appendRow([from, cc, time, sub, 'https://mail.google.com/mail/u/0/#inbox/'+mId])
}
}