如何在 Gmail 邮件到达时对其进行编辑?
How to edit Gmail messages as they arrive?
最终我的 objective 是通过带有唯一链接的自动加载图像来防止电子邮件跟踪。我知道 Google uses a proxy to load the images 所以至少他们不会透露我的 IP 地址,但有些个人和组织讨厌地将跟踪器嵌入到他们的电子邮件中——他们会主动检查我是否阅读了他们的电子邮件。
特别是在 Gmail 应用程序中,我可以关闭图像的自动加载,但我希望对没有此设置的其他应用程序也有类似的保护。例如,显然 there isn't a way to do this with Google Inbox.
我目前的想法是编写一个后端脚本,可以 运行 在新邮件(从事件或频繁轮询中收到)上将嵌入的 HTML 图像转换为超链接链接到那些图片——只有在我真的需要图片时才使用。这样,无论我使用什么应用程序打开电子邮件,我都可以控制 how/when 我被跟踪了。编辑电子邮件是我用 MS Exchange Server APIs 完成的事情,我正在寻找一种方法来用 Gmail 来完成这项工作——通过任何可用的方式。
我在 2010 年找到了几个关于如何使用 and Gmail itself 修改主题行的话题。当时,你不能那样做,但似乎有可能从那时起这些已经更新,或者有使用 Gmail API 或 IMAP 的解决方案。
tl;博士
对于我的 Gmail 帐户,如何以编程方式修改(并保存更改)收到的电子邮件?
可能的解决方案:
- Google 应用程序脚本
- Gmail API
- IMAP
- 其他?
我认为 Gmail API 可以完美满足您的需求。
假设我使用 Users.messages.list()
请求每分钟轮询一次收件箱以获取新消息。我小心地将 query
中的 after
参数与我上次检查收件箱时的值一起使用,作为纪元以来的秒数。我只要求提供潜在新消息的 ID。您还可以 subscribe to push events 来减轻用户在轮询和更改消息之前按下消息的风险,正如@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}
响应:
{
"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
标签。
我只是提取img
-tags,得到URLs,并删除邮件中所有带有我最喜欢的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..."
}
我修改后的新邮件现在在收件箱中!
最终我的 objective 是通过带有唯一链接的自动加载图像来防止电子邮件跟踪。我知道 Google uses a proxy to load the images 所以至少他们不会透露我的 IP 地址,但有些个人和组织讨厌地将跟踪器嵌入到他们的电子邮件中——他们会主动检查我是否阅读了他们的电子邮件。
特别是在 Gmail 应用程序中,我可以关闭图像的自动加载,但我希望对没有此设置的其他应用程序也有类似的保护。例如,显然 there isn't a way to do this with Google Inbox.
我目前的想法是编写一个后端脚本,可以 运行 在新邮件(从事件或频繁轮询中收到)上将嵌入的 HTML 图像转换为超链接链接到那些图片——只有在我真的需要图片时才使用。这样,无论我使用什么应用程序打开电子邮件,我都可以控制 how/when 我被跟踪了。编辑电子邮件是我用 MS Exchange Server APIs 完成的事情,我正在寻找一种方法来用 Gmail 来完成这项工作——通过任何可用的方式。
我在 2010 年找到了几个关于如何使用
tl;博士
对于我的 Gmail 帐户,如何以编程方式修改(并保存更改)收到的电子邮件?
可能的解决方案:
- Google 应用程序脚本
- Gmail API
- IMAP
- 其他?
我认为 Gmail API 可以完美满足您的需求。
假设我使用 Users.messages.list()
请求每分钟轮询一次收件箱以获取新消息。我小心地将 query
中的 after
参数与我上次检查收件箱时的值一起使用,作为纪元以来的秒数。我只要求提供潜在新消息的 ID。您还可以 subscribe to push events 来减轻用户在轮询和更改消息之前按下消息的风险,正如@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}
响应:
{
"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
标签。
我只是提取img
-tags,得到URLs,并删除邮件中所有带有我最喜欢的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..."
}
我修改后的新邮件现在在收件箱中!