具有HTML正文的mailto链接


319

mailto在HTML文档中有几个链接。

<a href="mailto:etc...">

我可以在mailto:部分插入HTML格式的正文href吗?

<a href="mailto:me@me.com?subject=Me&body=<b>ME</b>">Mail me</a>

请注意,在iOS中(2016),添加<i><b>标记以简单的斜体,粗体格式是完全可以的。


1
有完全相同的想法,并研究了一段时间。我试图将嵌入式<img>嵌入到消息正文中。mailto指令需要进行URL编码才能起作用。雷鸟的结果是HTML正文按原样出现,带有所有<img>指令和所有内容。我想这是雷鸟和大多数邮件客户端的安全问题-他们解析传入的mailto-content,以便它不会做任何可疑的事情。
汉尼斯·R。

4
我能找到的最好的东西来自此页面zaposphere.com/html-email-links-code ..在底部下方给出了一个列表:“其他大多数网站都没有提到的其他酷定制!!” 帮助了我很多。
斯图·安德鲁斯

您可以使用基本文本设置电子邮件的每个部分。关于无法进行html格式设置的限制,这是我构建的工具,用于自定义mailto Dead中的各个字段很简单:mailto.now.sh
Dawson B

Answers:


428

如您在RFC 6068中所看到的,这是完全不可能的:

特殊的<hfname>“正文”表示关联的<hfvalue> 是消息的正文。“正文”字段值旨在包含消息的第一个文本/纯文本正文部分的内容。“正文”伪头字段主要用于生成用于自动处理的短消息(例如,用于邮件列表的“订阅”消息),而不是用于一般的MIME正文。


4
@JoeBlow答案仍然是正确的。淘汰2368的RFC 6068仍说正文是纯文本。
马库斯·莱尔

8
如果您对此答案感到失望,请继续阅读:stackoverflow.com/a/46699855/256272(tl; dr .eml文件)

95

否。根本不可能。


1
并非完全正确。虽然支持非常稀缺,但其他答案表明,在iOS中,某些有限的HTML可能是可行的,并且IE + ActiveX + Outlook可以组合使用(urgh,yuck)。
西蒙·伊斯特

89

尽管无法使用HTML格式化电子邮件正文,但可以按照先前的建议添加换行符。

如果您能够使用javascript,则“ encodeURIComponent()”可能会像下面这样使用...

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:x@y.com?body=" + encodeURIComponent(formattedBody);
window.location.href = mailToLink;

1
电子邮件客户端可以运行嵌入式Javascript吗?OP表示这是一封电子邮件,而不是mailto:链接所在的网页。
wide_eyed_pupil 2012年

谢谢,在Rails中,您可以使用该raw("text \n more text \n\n\t")函数封装文本并将其转换为电子邮件正文的换行符和制表符
FireDragon 2013年

这对我有用,从Chrome的“ mailto”发送到Outlook。请注意,您只能编码正文,而不是整个mailto字符串。并且您不需要在之前/之后的空格\n
路加福音

2
我喜欢这种方法,下面是一个jsfiddle可以实际使用它:jsfiddle.net/oligray/5uosngy4
Oliver Gray

3
您也可以仅将%0A用作换行符,因此无需通过JavaScript进行操作。
Dirk Boer

58

我已经使用了它,它似乎可以与Outlook一起使用,而不是使用html,但是至少可以在将正文添加为输出时使用换行符设置文本的格式。

<a href="mailto:email@address.com?subject=Hello world&body=Line one%0DLine two">Email me</a>

2
因此,“%0D”是换行符。编码标签的等效代码是什么?
wide_eyed_pupil 2012年

3
%0D是换行符,是ctrl-m,制表符是ctrl-i,它是%09。看看这样的ASCII图表[ asciitable.com/index/asciifull.gif]。控制字符从1到31。@wide_eyed_pupil
Jim Bergman

2
这样做时似乎删除了所有签名。
Valentin Despa

%0A是\ n
KlemenTušar'16

3
那不是HTML正文!
Chloe,

46

这不是您想要的,但是可以使用现代javascript在客户端上创建EML文件并将其流传输到用户的文件系统,该文件系统应在其邮件程序中打开包含HTML的丰富电子邮件,例如Outlook:

https://stackoverflow.com/a/27971771/8595398

这是包含图像和表格的电子邮件的jsfiddle:https ://jsfiddle.net/seanodotcom/yd1n8Lfh/

的HTML

<!-- https://jsfiddle.net/seanodotcom/yd1n8Lfh -->
<textarea id="textbox" style="width: 300px; height: 600px;">
To: User <user@domain.demo>
Subject: Subject
X-Unsent: 1
Content-Type: text/html

<html>
<head>
<style>
    body, html, table {
        font-family: Calibri, Arial, sans-serif;
    }
    .pastdue { color: crimson; }
    table {
        border: 1px solid silver;
        padding: 6px;
    }
    thead {
        text-align: center;
        font-size: 1.2em;
        color: navy;
        background-color: silver;
        font-weight: bold;
    }
    tbody td {
        text-align: center;
    }
</style>
</head>
<body>
<table width=100%>
    <tr>
        <td><img src="http://www.laurell.com/images/logo/laurell_logo_storefront.jpg" width="200" height="57" alt=""></td>
        <td align="right"><h1><span class="pastdue">PAST DUE</span> INVOICE</h1></td>
    </tr>
</table>
<table width=100%>
    <thead>
        <th>Invoice #</th>
        <th>Days Overdue</th>
        <th>Amount Owed</th>
    </thead>
    <tbody>
    <tr>
        <td>OU812</td>
        <td>9</td>
        <td>$4395.00</td>
    </tr>
    <tr>
        <td>OU812</td>
        <td>9</td>
        <td>$4395.00</td>
    </tr>
    <tr>
        <td>OU812</td>
        <td>9</td>
        <td>$4395.00</td>
    </tr>
    </tbody>
</table>
</body>
</html>
</textarea> <br>
<button id="create">Create file</button><br><br>
<a download="message.eml" id="downloadlink" style="display: none">Download</a>

Java脚本

(function () {
var textFile = null,
  makeTextFile = function (text) {
    var data = new Blob([text], {type: 'text/plain'});
    if (textFile !== null) {
      window.URL.revokeObjectURL(textFile);
    }
    textFile = window.URL.createObjectURL(data);
    return textFile;
  };

  var create = document.getElementById('create'),
    textbox = document.getElementById('textbox');
  create.addEventListener('click', function () {
    var link = document.getElementById('downloadlink');
    link.href = makeTextFile(textbox.value);
    link.style.display = 'block';
  }, false);
})();

8
现在这是个好主意
Greg

2
简洁的想法,但仅作记录,在最新的Apple Mail上,此文件将打开,但将不可编辑/发送,它的作用类似于已发送的电子邮件记录
pmarreck

1
使用Apple Mail(11.2),打开.eml文件后,可以从菜单(shift-cmd-D)中选择“消息/再次发送”,以将电子邮件置于编辑模式。
杰夫·科利尔

30

有些事情是可能的,但不是全部,例如说您要换行,而不是使用<br />use%0D%0A

例:

<a href="mailto:?subject=&body=Hello,%0D%0A%0D%0AHere is the link to the PDF Brochure.%0D%0A%0D%0ATo view the brochure please click the following link: http://www.uyslist.com/yachts/brochure.pdf"><img src="images/email.png" alt="EMail PDF Brochure" /></a>                        

7
那不是HTML ...还是文本。
布拉德2014年

如果您使用$ mailheader格式化电子邮件,则不会。=“ Content-type:text / html; charset = iso-8859-1 \ r \ n”;
Stephen Kaufman 2014年

12
@StephenKaufman-您不是发送电子邮件的人,而是单击链接的客户。意味着您不知道如何设置电子邮件客户端。您不知道其标题是如何设置的。这将对某些电子邮件客户端有效,而对其他电子邮件客户端则无效。
Narxx 2014年

1
谢谢,这对我来说是第二好的选择,如果我不能做html,那么至少我可以做回车。我没意见。
hamish

16

值得指出的是,至少在iPhone的Safari上,插入基本的HTML标签,例如 <b><i><img>(在理想情况下,你不应该在其他情况下使用了,无论如何,宁愿CSS)插入身体参数mailto:确实出现了工作-他们在电子邮件客户端中很荣幸。我尚未进行详尽的测试,以查看其他移动或桌面浏览器/电子邮件客户端组合是否支持此功能。这是否真的符合标准也值得怀疑。但是,如果要为该平台构建,可能会很有用。

正如其他响应所指出的那样,在将其嵌入mailto:链接之前,还应该在整个主体上使用encodeURIComponent 。


是的,无论如何,在iOS中添加简单的粗体,斜体标签确实非常有效。
Fattie

在iOS上,我无法使用<img src ='mybase64'/>发送正确的电子邮件-在Gmail中,我的邮件中包含base64。
Vitaly Zdanevich '19


0

关于共享html,我也有同样的问题。我在html下面为我工作。将<替换为<&>并替换为>。

<a href="mailto:?subject=link Share&body=&lt;a href='www.google.com'&gt;google&lt;/a&gt;">Email</a>

注意:仅在ubuntu中有效。在Windows中将无法使用。


-1

任何人都可以尝试以下操作(mailto函数仅接受纯文本,但在这里我展示了如何使用HTML内部文本属性以及如何将锚点添加为mailto正文参数):

//Create as many html elements you need.

const titleElement = document.createElement("DIV");
titleElement.innerHTML = this.shareInformation.title; // Just some string

//Here I create an <a> so I can use href property
const titleLinkElement = document.createElement("a");
titleLinkElement.href = this.shareInformation.link; // This is a url

...

let mail = document.createElement("a");

// Using es6 template literals add the html innerText property and anchor element created to mailto body parameter
mail.href = 
  `mailto:?subject=${titleElement.innerText}&body=${titleLinkElement}%0D%0A${abstractElement.innerText}`;
mail.click();

// Notice how I use ${titleLinkElement} that is an anchor element, so mailto uses its href and renders the url I needed

-3

可以输入unicode值来插入换行符(即:),\u0009但是HTML标签具有不同程度的支持,应避免使用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.