mailto链接多个正文行

137

在mailto链接中,我遇到了多行文本无法正确工作的问题。

在我的测试中,我使用的是Outlook默认的邮件阅读器。

以下内容放置在锚点href中:

mailto:email@address.com?&subject=test&body=type%20your&body=message%20here

只有“message here”会显示在电子邮件正文中。(无论我使用Chrome还是IE)

您有什么想法?

4个回答

240

您可以使用URL编码将换行符编码为%0A

mailto:email@address.com?subject=test&body=type%20your%0Amessage%20here

尽管上述方法在许多情况下似乎可行,但用户olibre 指出管理mailto URI方案的RFC规定应该使用%0D%0A(回车加换行)而不是%0A(换行)。另请参见: 换行表示法


4
谢谢,这个方法对我很有效,而且似乎比互联网上流传的其他解决方案要简单得多。 - bryn
这对所有特殊字符都适用,对吗?& =%26,%=%25,是否存在任何不符合此模式的字符? - blast_hardcheese
2
关于编程的相关内容:$0A 简单地表示为 escape("\n") - divillysausages
2
该编码器使用标准的encodeURIComponent来对URI组件进行编码。 - Cees Timmerman
1
适用于电子邮件和在 WhatsApp 消息中分享的我所使用的方法。 - BenB
我一直在尝试使用这个来进行双行换行,但每当我使用两个%0D%0A时,它会打破超链接。 - Fiztban

46
  1. 使用单一的body参数放在mailto字符串中。
  2. 使用%0D%0A作为换行符。

mailto URI协议RFC2368(1998年7月)和RFC6068(2010年10月)进行了规定。
以下是最新RFC的第5节的摘录:

[...]消息正文中的换行符必须使用"%0D%0A"进行编码。
即使消息正文中没有尾随的"%0D%0A",实现程序也可以向消息正文中添加一个最终的换行符[...]

同样在第6节中有来自同一RFC的示例。

<mailto:infobot@example.com?body=send%20current-issue%0D%0Asend%20index>

上面的 mailto 主体对应于:

send current-issue
send index

20

使用 escape() 函数可以获取正文行

body_line =  escape("\n");

所以

href = "mailto:me@my.com?body=hello,"+body_line+"I like this.";

1
我个人更喜欢这种方式。主要是因为当你尝试添加一个百分号时,它也能正常工作。 - Dan
6
相反,应该使用encodeURIComponent。在这里查看。 - Cees Timmerman

17

这就是我的做法,只需添加\n并使用encodeURIComponent

示例

var emailBody = "1st line.\n 2nd line \n 3rd line";

emailBody = encodeURIComponent(emailBody);

href = "mailto:me@somesite.com?body=" + emailBody;

请查看encodeURIComponent文档


你在使用 encodeURIComponent 时需要用哪个 include - Frak
1
@frakman1 encodeURIComponent是JavaScript函数。您可以在不包含任何内容的情况下使用它。 - kiranvj
@Koosh 因为上面的代码是 JavaScript,尝试使用此方法在 Blazor 中编码电子邮件正文 https://dev59.com/eXVD5IYBdhLWcg3wGXpI#4550600 - kiranvj

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