我正在尝试实现一个简单的google脚本来处理gmail用户收到的每条消息。
我找到了一个像这样的例子:
var threads = GmailApp.getInboxThreads();
for (var i=0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j=0; j < messages.length; j++) {
if (!messages[j].isUnread()) {
continue;
}
//process message
}
}
即:我遍历收件箱中的所有邮件并搜索未读邮件。仅1800条消息就非常慢。
理想情况下,我正在寻找一个触发器,一旦收到每条新消息就会被触发
如果没有这样的事情,我会尝试利用我所看到的:
GmailApp.getMessageById(id)
答案 0 :(得分:9)
对于迟到的回复感到抱歉,但我遇到了同样类型的问题,最后我使用了GmailApp.search()...希望这有帮助。
// find unread messages
var threads = GmailApp.search('is:unread');
....
警告强>
当所有线程的大小太大而系统无法处理时,此调用将失败。如果线程大小未知,并且可能非常大,请使用“分页”&#39;调用,并指定在每次调用中检索的线程范围。
看看GmailApp.search(query)和 GmailApp.search(query, start, max)
答案 1 :(得分:7)
不幸的是,没有触发器会触发每条收到的消息。但是有一个很好的解决方法:
设置过滤规则,为所有传入消息分配一个特殊标签“ToBeProcessedByScript”。由于通配符在Gmail过滤器中不起作用,请使用to:字段。
运行时间触发的脚本,使用GmailApp.getUserLabelByName("ToBeProcessedByScript").getThreads()
收集所有新的消息线程。在处理新消息之前删除特殊标签。
答案 2 :(得分:3)
你可以使用
GmailApp.getInboxThreads(0, 50);
用前五十个邮件初始化变量。
答案 3 :(得分:2)
我已经扩展了代码,检查第一条消息是否真的是未读的消息。如果不是,它将检查下一条消息,并将继续直到它找到未读消息:
function getUnreadMails() {
var ureadMsgsCount = GmailApp.getInboxUnreadCount();
var threads;
var messages;
var k=1;
if(ureadMsgsCount>0)
{
threads = GmailApp.getInboxThreads(0, ureadMsgsCount);
for(var i=0; i<threads.length; i++)
{
if(threads[i].isInInbox())
{
messages = threads[i].getMessages();
for(var j=0; j<messages.length; j++)
{
while (messages[j].isUnread() === false)
{
threads=GmailApp.getInboxThreads(k, ureadMsgsCount);
messages = threads[i].getMessages();
k++;
}
Logger.log(messages[j].getSubject());
// process unread message
}
}
}
}
}
答案 4 :(得分:1)
您可以像djtek所提到的那样创建时间触发器,但不是标记所有消息然后检索带标签的消息,您只需获取未读消息的数量,并从0检索线程到未读消息的数量,适用于我的代码:
function getUnreadMails() {
var ureadMsgsCount = GmailApp.getInboxUnreadCount()
if(ureadMsgsCount>0)
{
var threads = GmailApp.getInboxThreads(0, ureadMsgsCount);
for(var i=0; i<threads.length; i++)
{
if(threads[i].isInInbox())
{
var messages = threads[i].getMessages();
for(var j=0; j<messages.length; j++)
{
Logger.log(messages[j].getSubject());
// process unread message
}
}
}
}
}
答案 5 :(得分:1)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/contentMainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="100">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="75">
<ScrollView
android:id="@+id/mainScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/mainScrollLL"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"></LinearLayout>
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_weight="25"
android:orientation="horizontal">
<Button
android:id="@+id/startTrade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Trade"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Stop Trade"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</LinearLayout>