在Gmail撰写界面中预填充HTML文本

12

你在进行URL编码时使用什么换行符?为什么不使用标准的mailto: URI方案?(href="mailto:whoever@company.com?subject=SubjectHere") - Anthony
基本上,此链接会打开 Gmail 的撰写邮件界面 - 我尝试过对换行符进行 URL 编码以及使用 HTML 断行标签,但都不起作用 :( - 它是为了一个基于 Google 应用的项目。 - Ali
更正问题中提供的链接,因为提供的链接会导致服务器错误页面。这可能会帮助其他人。 https://mail.google.com/?view=cm&fs=1&tf=1&source=mailto&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&cc=WHOEVER%40COMPANY.COM&bcc=WHOEVER%40COMPANY.COM&body=PREPOPULATEDBODY - aditya
有没有办法可以打开邮件窗口,就像是回复或转发一样?这样用户就可以直接转发或回复电子邮件了。 - Kartik Domadiya
6个回答

16

2
谢谢,那解决了我的问题,不过现在又出现了太多文本的问题 - https://dev59.com/ZU3Sa4cB1Zd3GeqPrgaX - Ali
1
Compose url的功能非常好:)。谢谢。有没有办法可以打开邮件窗口,就像回复或转发一样?这样用户就可以直接转发或回复电子邮件了。 - Kartik Domadiya
@Kartik 找到任何解决方案了吗? - Bryan P

9

Gmail支持HTML5的registerProtocolHandler()发出的内容。

示例:

var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto:?subject=test");

那是Gmail希望你使用的。当然,你需要修改特定于域的撰写URI的开头。但这只会加载撰写表单本身(而不是与收件箱页面集成)。因此,如果你想将撰写表单集成到收件箱页面中,你需要加载:
"https://mail.google.com/mail/?compose=1&view=cm&fs=1&to=1&su=2&body=3&cc=4&bcc=5"

相反,你需要先解析mailto URI以获取hfvalues并修复它们的百分号编码,以确保它们适合在HTTP URI中发送。有关更多信息,请参见下面的内容。

现在,Gmail使用HTML5 compose URI对url参数进行百分比解码以获取mailto URI。然后,它解析mailto URI以获取hfvalues。然后,它使用这些hfvalues构建类似于inbox-integrated的URI并将您重定向到该URI。

Gmail HTML5方法的问题在于它不会将hfvalues中的'+'字符百分比编码为"%2B"。这样做的最终结果是,在Gmail撰写表单中,mailto URI中的'+'字符(它们不是mailto URI中的空格)变成了空格。

要解决Gmail的错误,只需执行以下操作:

var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto:?subject=test".replace(/\+/g, "%2B"));

相反。

这个漏洞已经报告多年了,但Gmail拒绝修复它。

正如您所看到的,对于集成收件箱的撰写URI,如果您有mailto URI“mailto:?subject=1+2”,则需要确保在撰写URI中发出su = 1%2B而不是su = 1 + 2。后者将导致主题字段中有一个空格而不是“+”。这部分不是Gmail的错误。这就是HTTP的工作方式。

您可以查看我的Gmail Opera撰写扩展程序的源代码(解压缩它)以查看我如何使用HTML5方式。这很简单。但是,它并不包含+到%2B的解决方法。

然而,您可以查看我正在测试的扩展程序的更新版本(只需要有人在首选项中测试特定域选项)以进行更高级的处理。这个版本使用我的自定义通用mailto URI解析器来规范mailto URI及其hfvalues以处理“+”情况、不安全字符和重复hfvalues。它还提供了一个选项,让您选择是否使用HTML5撰写URI。
您还可以查看Opera的此用户JS脚本以了解如何操作。
关于之前提到的重复hfvalue问题和其他mailto URI问题,请参阅我的mailto URI规范,该规范被用于RFC6068的研究和反馈。
注意:仅因为Gmail用户打开了富文本编辑,这并不意味着Gmail将接受HTML标记并将其视为此类。它们都被解释为文本。

很好的解释。太遗憾了,这不能被追溯地接受为答案。 - Palpatim
你知道是否可以将 ?authuser=other@account.com 添加到这些URL中,以便选择另一个GMail帐户吗? - oodavid
@oodavid 我不确定,但我认为不是,并且假设它是通过cookies完成的。 - Shadow2531
@Shadow2531 很遗憾你的链接已经失效。 - kingolego
@kingolego 对此很抱歉。您可以给我发送电子邮件到Gmail信箱,我可以向您发送任何您想要的文件。我的邮件地址是我的用户名加上@gmail.com。 - Shadow2531

3

我使用标准的JavaScript encodeURIComponent() 对多行正文进行编码。它可以正常工作。

此外,那些想要预填写通用gmail而不是特定于应用程序域的帐户的人,请改用以下URL:

https://mail.google.com/?view=cm&fs=1&tf=1&....


1
感谢您的提示。其他回复中没有指定的一件事是,如果您使用多个帐户登录Gmail,例如一个个人帐户和一个使用Google应用的专业帐户,则使用 https://mail.google.com/a/domain.com/ 而不是 https://mail.google.com/mail/ 允许您指定要用于发送邮件的邮箱。否则,Gmail只会加载您首先登录的帐户。

0

另一个限制是GET请求仅限于一定数量的字符,因此尝试使用MAILTO + GET参数方法无法用于较大的内容。是否有人发现通过某种网络请求方式将更大的内容推送到新的撰写窗口的另一种方法?

从我所了解的情况来看,这将是困难的,因为mailto实际上是浏览器操作,对吗?


0

目前(2014年2月),要在撰写邮件时预填收件人和主题字段,请使用以下代码:

https://mail.google.com/mail/?&v=b&cs=wh&to=alias@domain.com&subject=subject%20goes%20here

注意: cs=wh 是重要的,因为组合超链接使用 cs=b,它不会自动填充。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接