我认为 Gmail API 将完全满足您的需求。
假设我每分钟都在使用Users.messages.list()-request 轮询收件箱中的新邮件。我小心地将after 中的after 参数与我最后一次检查收件箱的值一起使用,作为纪元以来的秒数。我只询问潜在新消息的 ID。您还可以subscribe to push events 来降低用户在轮询和更改消息之前按下消息的风险,正如 @Max 在 cmets 中提到的那样。如果脚本只适合您,则可能不是问题。
q = after:<TIME_IN_SECONDS_SINCE_EPOCH_OF_LAST_POLL>
fields = messages/id
GET https://www.googleapis.com/gmail/v1/users/me/messages?fields=messages%2Fid&q=after%3A1437677475478&access_token={YOUR_API_KEY}
回应:
{
"messages": [
{
"id": "14ebc16800d1fdc0"
}, ...
]
}
哈!我有一条新消息。我得到它的原始内容,解码它的 URL 安全 base64 编码内容,然后看看。
format = raw
fields = raw
GET https://www.googleapis.com/gmail/v1/users/me/messages/14eb68cb028163ba?fields=raw&format=raw&access_token={YOUR_API_KEY}
回应:
{
"raw": "RGVsaXZlcmVk..."
}
让我们进行前面提到的 base64 解码。将所有“-”替换为“+”,将“_”替换为“/”,将其从 URL 安全 base64 数据转换为常规 base64 编码数据。
atob("RGVsaXZlcmVk...".replace(/\-/g, '+').replace(/\_/g, '/'));
结果:
<html lang="en">
<head>
<title>
Computerphile just uploaded a video
</title>
.
.
.
<img class="open_tracking_img" src="http://www.youtube.com/attribution_link?a=vi-KC3YA0Qc&u=/gen_204%3Fa%3Dem-uploademail" width="1" height="1">
.
.
.
</html>
肯定包含很多img-tags。
我只是提取img-tags,获取网址,然后删除邮件中我最喜欢的XML Parser 中的所有img-tags。
删除标签后,我只需将 URL 插入邮件中我认为合适的位置,并将其编码回它检索到的 URL 安全 base64 编码数据。
btoa("<html lang="en">...".replace(/\+/g, '-').replace(/\//g, '_'));
最后,我删除了原来的邮件,插入修改后的邮件。
DELETE https://www.googleapis.com/gmail/v1/users/me/messages/14eb68cb028163ba?access_token={YOUR_API_KEY}
POST https://www.googleapis.com/gmail/v1/users/me/messages?access_token={YOUR_API_KEY}
{
"raw": "RGVsaXZlcmVkLVRvO..."
}
我修改后的新邮件现在在收件箱中!