当前位置: 首页 > 知识库问答 >
问题:

如何在Gmail邮件到达时编辑它们?

阎裕
2023-03-14

最终,我的目标是防止通过具有独特链接的自动加载图像进行电子邮件跟踪。我知道谷歌使用了一个代理来加载图片,这样至少他们不会透露我的IP地址,但有一些个人和组织在他们的电子邮件中令人讨厌地嵌入了追踪器,他们会主动检查我是否阅读了他们的电子邮件。

特别是在Gmail应用程序中,我可以关闭图像的自动加载,但我希望对没有此设置的其他应用程序进行类似的保护。例如,显然没有办法在Google Inbox中做到这一点。

我目前的想法是编写一个可以在新邮件(从事件或频繁轮询收到)上运行的后端脚本,将嵌入的超文本标记语言图像转换为指向这些图像的超链接——仅在我真的需要图像时使用。这样,无论我使用什么应用程序打开电子邮件,我都可以控制如何/何时跟踪我。编辑电子邮件是我用MSExchange ServerAPI做的事情,我正在寻找一种用Gmail做到这一点的方法——通过任何可用的方式。

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

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

可能的解决方案:

  • 谷歌应用程序脚本
  • Gmail API
  • IMAP
  • 另一个

共有1个答案

程俊誉
2023-03-14

我认为Gmail API将完全满足您的需求。

假设我每分钟都在使用 Users.messages.list()-request 轮询收件箱中的新邮件。我小心翼翼地在查询中使用 after-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}

答复:

{
 "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-标记,获取URL,然后使用我最喜欢的XML解析器删除邮件中的所有img-标记。

移除标签后,我只需在邮件中我认为合适的地方插入URL,并将其编码回URL safe 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..."
}

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

 类似资料:
  • 问题 如何用Gmail发送邮件? 解法 安装和维护邮件服务器通常是沉闷乏味的。所以如果你有Gmail帐号,就可以使用Gmail做为SMTP服务器来发送邮件,我们唯一要做的就只是在web.config中指定Gmail的用户名和密码。 web.config.smtp_server = 'smtp.gmail.com' web.config.smtp_port = 587 web.config.smtp

  • 问题内容: 我正在编写一个应用程序,希望在其中具有文档的近实时协作编辑功能(非常类似于Google Documents样式编辑)。 我知道如何跟踪光标位置,这很简单。只需使用可存储在数据库中的当前用户ID,文件名,行号和行号每半秒或第二秒轮询服务器,该轮询请求的返回值就是其他用户游标的位置。 我不知道该怎么做,就是以一种不会使您的光标移开并强制完全重新加载的方式来更新文档,因为这样做对我来说太慢了

  • 问题内容: 我正在从Java应用程序向Gmail帐户发送邮件。我曾经使用过Java Mail API,并且运行良好。但是是否可以在不使用Java中的邮件API的情况下发送电子邮件? 我的意思是仅使用套接字: 但它不起作用,它不会发送邮件。谁能告诉我可能是什么问题? 问题答案: 这是一个很好的例子: -> http://www.java2s.com/Code/Java/Network-Protoco

  • 我们有一个托管在Amazon EC2上的应用程序。它连接到gmail服务器,使用Java Mail API向注册用户发送电子邮件。它使用gmail服务器通过电子邮件地址发送电子邮件support@domainname.com(不是gmail.com的电子邮件地址)。然而,最近,电子邮件被发送到用户的垃圾邮件文件夹。你能建议我如何解决这个问题并将邮件发送到收件箱吗?

  • 我有这个发邮件的密码 此代码为除之外的任何邮件提供商发送邮件。 这可能是什么原因

  • 问题内容: 我已经开始使用Webdriver自动执行100%手动的测试。 在一种使用情况下,我需要单击发送到用户收件箱的链接。在这种情况下,我遇到了Gmail问题。登录后,我不知道如何打开特定的电子邮件。 我知道电子邮件主题等,但是无法使用它来访问元素。Gmail会以JSON格式接收所有数据,然后通过js函数构建整个页面。因此,webdriver无法访问使用接收到的JSOn数据构建的任何元素。 任