如何在Gmail邮件到达时进行编辑?

Log*_*acy 3 imap google-apps-script gmail-api

最终,我的目标是通过具有唯一链接的自动加载图像来阻止电子邮件跟踪.我知道谷歌使用代理加载图片,所以至少他们不会透露我的IP地址,但有些个人和组织烦人地将跟踪器嵌入他们的电子邮件中 ​​- 他们会主动检查我是否阅读他们的电子邮件.

特别是在Gmail应用中,我可以关闭图片的自动加载功能,但我希望对没有此设置的其他应用提供类似的保护.例如,显然无法通过Google收件箱执行此操作.

我目前的想法是编写一个可以在新邮件上运行的后端脚本(从事件或频繁轮询中接收)将嵌入的HTML图像转换为指向这些图像的超链接链接 - 仅在我真正需要图像时使用.这样,无论我用什么应用程序打开电子邮件,我都可以控制如何/何时跟踪.编辑电子邮件是我用MS Exchange Server API完成的,我正在寻找一种方法来使用Gmail - 通过任何可用的方式.

我在2010年发现了一些关于如何使用Google Apps脚本和Gmail本身修改主题行的线索.当时,您无法做到这一点,但从那时起它们似乎已经更新,或者有使用Gmail API或IMAP的解决方案.

TL;博士

对于我的Gmail帐户,如何以编程方式修改(并保存更改)收到的电子邮件?

可能的解决方案:

  • Google Apps脚本
  • Gmail API
  • IMAP
  • 其他?

Tho*_*lle 6

我认为Gmail API可以完美地满足您的需求.

假设我正在每分钟轮询我的收件箱以获取新邮件,并使用Users.messages.list()-request.我小心翼翼地使用after我query在上次检查收件箱时的值中的-parameter,这是自纪元以来的秒数.我只询问潜在新消息的ID.您还可以订阅推送事件,以降低用户在轮询和更改消息之前按下消息的风险,如评论中@Max所述.如果脚本只适合您,可能不是问题.

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}
Run Code Online (Sandbox Code Playgroud)

响应:

{
 "messages": [
    {
     "id": "14ebc16800d1fdc0"
    }, ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

哈!我有一条新消息.我得到它原始,解码其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}
Run Code Online (Sandbox Code Playgroud)

响应:

{
 "raw": "RGVsaXZlcmVk..."
}
Run Code Online (Sandbox Code Playgroud)

我们来做前面提到的base64解码.将所有" - "替换为"+",将"_"替换为"/",将其从URL安全base64数据转换为常规base64编码数据.

atob("RGVsaXZlcmVk...".replace(/\-/g, '+').replace(/\_/g, '/'));
Run Code Online (Sandbox Code Playgroud)

结果:

<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>
Run Code Online (Sandbox Code Playgroud)

当然包含很多img-tags.

我只是提取img-tags,获取URL,并img使用我最喜欢的XML Parser删除邮件中的所有-tags .

删除标记后,我只是在我认为合适的邮件中插入URL,然后将其编码回到检索到的URL安全base64编码数据.

btoa("<html lang="en">...".replace(/\+/g, '-').replace(/\//g, '_'));
Run Code Online (Sandbox Code Playgroud)

最后,我删除原始邮件并插入修改后的邮件.

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..."
}
Run Code Online (Sandbox Code Playgroud)

我的新修改邮件现在在收件箱中!

在此输入图像描述