【问题标题】:How does Google Calendar update the content of an email AFTER it is sent?Google 日历如何在电子邮件发送后更新其内容?
【发布时间】:2017-08-26 04:19:47
【问题描述】:
如果原始活动已更改,Google 日历邀请电子邮件将在发送后更新...Google 如何实现这一点?是否有任何人可以做到这一点的通用技术?或者这仅仅是因为 Google 拥有 gMail/gCalendar 并且这两个系统在 SMTP 之外的幕后集成才可能吗?
我的第一个猜测是他们使用了 iframe 或打开电子邮件时加载的图像,但检查 gMail 页面的来源并没有显示任何迹象。
这是更新文本的屏幕截图:
这是在 gMail 中阅读电子邮件时该页面部分的 HTML:
【问题讨论】:
标签:
javascript
email
smtp
gmail
html-email
【解决方案1】:
我想知道他们是否在发送电子邮件时在某个 url 上创建了一个图像,然后如果它发生变化,他们只是将其删除,然后在电子邮件中他们有类似的东西
<div id="updated"></div>
<img src="asdfawe" onerror="document.getElementById('updated').innerhtml="some text""/>
虽然我不确定他们是否不能使用 onerror 属性(b/c 电子邮件 + js = 坏主意)。唯一的另一种方法是使用 alt 属性并使用一些 css 技巧,但我不知道这会如何导致检查代码。
【解决方案2】:
注意:
Inspecting Source除了在包括 ajax 在内的所有动态操作之后在页面中看到的内容的标记之外,什么也没有。
要查看实际来源,请访问view-source:url。
现在的问题
该信息在运行时通过 JavaScript 代码自动更新。
在图像中,您检查了 Inspect 元素,该元素显示了实时视图的代码,因此您看到了更新的内容。
它是由 JavaScript DOM 和文本操作完成的。
为了验证这一点,
- 点击地址栏。
- 在网址前添加
view-source:。所以,它看起来像view-source:https://url
- 然后按
ctrl+f或对应键find。
- 搜索
<div id=":8hg",它将显示0 results。
view-source 是在没有任何 ajax 或 JavaScript 操作的情况下加载文件的源代码。
div 不在源中。所以,我们可以理解它是动态完成的。
详细检查时,
在源代码中,我们可以看到一个链接https://www.google.com/calendar/event?action\u003dVIEW\u0026eid\u003db.....,它存储在array中。
从此链接获取内容。
(为了隐私,我把一些文字涂黑了)。
根据返回的url,更新邮件内容。
为了验证这一点,
在邮件中,您可以看到此邀请已过期
但是在view-source:页面中,搜索此邀请已过期会返回0 results。
因此,可以确定日历详细信息是通过 Gmail 对 G 日历 API 的 API 调用获取的。