我发现要打开 Gmail 的撰写邮件页面,您必须先登录并打开以下链接:
替换变量会在撰写表单的相应位置填入内容。然而,如果我想在正文中输入多行文字或换行符,即使对其进行 urlencode 处理也无法正常工作。这里有什么建议吗?
我发现要打开 Gmail 的撰写邮件页面,您必须先登录并打开以下链接:
替换变量会在撰写表单的相应位置填入内容。然而,如果我想在正文中输入多行文字或换行符,即使对其进行 urlencode 处理也无法正常工作。这里有什么建议吗?
确保您的UrlEncode方法确实将换行符转换为"%0a"。这是一个包含2行的电子邮件正文的示例:
Gmail支持HTML5的registerProtocolHandler()发出的内容。
示例:
var compose = "https://mail.google.com/mail/?extsrc=mailto&url=" + encodeURIComponent("mailto:?subject=test");
"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。我使用标准的JavaScript encodeURIComponent() 对多行正文进行编码。它可以正常工作。
此外,那些想要预填写通用gmail而不是特定于应用程序域的帐户的人,请改用以下URL:
https://mail.google.com/a/domain.com/
而不是 https://mail.google.com/mail/
允许您指定要用于发送邮件的邮箱。否则,Gmail只会加载您首先登录的帐户。另一个限制是GET请求仅限于一定数量的字符,因此尝试使用MAILTO + GET参数方法无法用于较大的内容。是否有人发现通过某种网络请求方式将更大的内容推送到新的撰写窗口的另一种方法?
从我所了解的情况来看,这将是困难的,因为mailto实际上是浏览器操作,对吗?
目前(2014年2月),要在撰写邮件时预填收件人和主题字段,请使用以下代码:
https://mail.google.com/mail/?&v=b&cs=wh&to=alias@domain.com&subject=subject%20goes%20here
cs=wh
是重要的,因为组合超链接使用 cs=b
,它不会自动填充。
mailto:
URI方案?(href="mailto:whoever@company.com?subject=SubjectHere"
) - Anthony