大家好我发现为了打开GMAIL撰写屏幕你必须登录并打开以下链接:
替换变量会填写撰写表单上的相应位置。但是,如果我想进入身体多行文本或换行符,即使我对其进行了urlencode也无法正常工作。这里有什么想法吗?
答案 0 :(得分:14)
检查您的UrlEncode方法是否真的将换行符转换为“%0a”。以下是2行电子邮件正文的示例:
答案 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域特定帐户的人,请改用此网址:
答案 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实际上是一个正确的浏览器操作?