使用HTML文本预填充gmail撰写屏幕

时间:2010-04-06 09:56:34

标签: html gmail urlencode

大家好我发现为了打开GMAIL撰写屏幕你必须登录并打开以下链接:

https://mail.google.com/a/domain/?view=cm&fs=1&tf=1&source=mailto&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&cc=WHOEVER%40COMPANY.COM&bcc=WHOEVER%40COMPANY.COM&body=PREPOPULATEDBODY

替换变量会填写撰写表单上的相应位置。但是,如果我想进入身体多行文本或换行符,即使我对其进行了urlencode也无法正常工作。这里有什么想法吗?

6 个答案:

答案 0 :(得分:14)

检查您的UrlEncode方法是否真的将换行符转换为“%0a”。以下是2行电子邮件正文的示例:

https://mail.google.com/mail/?view=cm&ui=2&tf=0&fs=1&to=WHOEVER%40COMPANY.COM&su=SUBJECTHERE&body=LINE1%0aLINE2

答案 1 :(得分:8)

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撰写URI的作用是百分比解码url参数以获取mailto URI。然后,它解析mailto URI以获取hfvalues。然后,它使用这些hfvalues来构建一个类似于收件箱集成的URI,并将其重定向到它。

Gmail的HTML5方法存在的问题是,它不会将hfvalues中的“+”字符编码为“%2B”。最终结果是mailto URI中的“+”字符(它们不是mailto URI中的空格)在Gmail撰写表单中以空格形式出现。

要解决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”,则需要确保在撰写时发出su = 1%2B2 URI而不是su = 1 + 2。后者将导致空间位于主题字段而不是“+”。这部分不是Gmail的错误。这就是HTTP的工作原理。

您可以看到my Gmail Compose Extension for Opera的源代码(解压缩)以了解我如何使用HTML5方式。这很简单。但是,它不包含+到%2B的解决方法。

但是,您可以看到我正在测试的the newer version of the extension(只需要有人在首选项中测试特定于域的选项)以进行更高级的处理。这个使用my custom, generic mailto URI parser来规范化mailto URI及其hfvalues以处理'+'情况,不安全的字符和重复的hfvalues。它还提供了一个选项,可以选择是否要使用HTML5撰写URI。

您还可以查看this User JS script for Opera了解如何做事。

对于前面提到的重复hfvalue问题和其他mailto URI内容,请参阅my mailto URI spec,该RFC6068用于{{3}}的研究和反馈。

注意:仅仅因为Gmail用户启用了丰富的文本编辑功能,这并不意味着Gmail会在撰写URI中接受HTML标记并将其视为此类处理。这一切都被解释为文本。

答案 2 :(得分:2)

我使用标准的javascript encodeURIComponent()来编码多线体。它奏效了。

另外,那些想要预填充通用gmail而非app域特定帐户的人,请改用此网址:

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

答案 3 :(得分:1)

目前(2014年2月),要使用to和subject字段预先填充撰写屏幕,请使用:

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

注意:cs=wh很重要,因为撰写超链接使用的cs=b不会自动填充。

答案 4 :(得分:1)

感谢您的提示。在其他回复中未指定的一件事是,如果您使用https://mail.google.com/a/domain.com/代替{https://mail.google.com/mail/而使用多个帐户(例如个人帐户和使用Google Apps的专业帐户)登录Gmail 1}}允许您指定用于发送邮件的邮箱。否则,Gmail会先加载您登录的帐户。

答案 5 :(得分:0)

另一个限制是GET请求仅限于一定数量的字符,因此尝试使用MAILTO + GET参数方法不适用于较大的内容。有没有人找到另一种方法通过某种Web请求将更大的内容推送到新的Compose窗口?

据我所知,这将是困难的,因为mailto实际上是一个正确的浏览器操作?