mailto链接与HTML正文

时间:2011-04-11 10:58:35

标签: html email mailto

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

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

我可以在mailto:的<{1}}部分插入HTML格式的正文吗?

href

请注意,(2016年)在iOS中,添加<a href="mailto:me@me.com?subject=Me&body=<b>ME</b>">Mail me</a> <i>标记以进行简单的斜体粗体格式化是完全正常的。

13 个答案:

答案 0 :(得分:399)

正如您在RFC 6068中所看到的,这根本不可能:

  

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

答案 1 :(得分:94)

没有。这根本不可能。

答案 2 :(得分:77)

虽然无法使用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;

答案 3 :(得分:50)

我已经使用了它,它似乎适用于outlook,而不是使用html,但你可以使用换行符格式化文本,至少在将主体添加为输出时。

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

答案 4 :(得分:27)

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

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

以下是包含图片和表格的电子邮件的简介: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>

的Javascript

(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);
})();

答案 5 :(得分:23)

有些事情是可能的,但不是全部,比如你想要换行,而不是使用<br />使用%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>                        

答案 6 :(得分:16)

值得指出的是,在iPhone上的Safari上,至少插入基本的HTML标记,例如<b><i><img>(理想情况下你不应该使用在其他情况下,无论如何,更喜欢CSS)到mailto:中的body参数似乎确实有效 - 它们在电子邮件客户端中得到尊重。我还没有进行详尽的测试,看看是否有其他移动或桌面浏览器/电子邮件客户端组合支持。它是否真的符合标准也是不确定的。如果您正在为该平台构建,那么可能会很有用。

正如其他回复所指出的那样,你应该在整个身体上使用encodeURIComponent,然后再将其嵌入mailto:链接。

答案 7 :(得分:2)

Thunderbird supports html-bodymailto:me@me.com?subject=Me&html-body=<b>ME</b>

答案 8 :(得分:0)

任何人都可以尝试以下操作(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

答案 9 :(得分:-1)

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

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

注意:它仅在ubuntu中起作用。在Windows中将无法使用。

答案 10 :(得分:-3)

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

答案 11 :(得分:-10)

我这样做过:

var newLine = escape("\n");
var body = "Hello" + newLine +"World";

输出将是:

Hello
World  

答案 12 :(得分:-30)

以下是将所有内容添加到MAILTO链接的方法:

<a href="mailto:YourName@YourSite.com? cc=someone@YourSite.com&bcc=someoneElse@YourSite.com &subject=Shipping%20Information%20Request&body=Please%20tell%20me%20if%20my%20order%20has%20shipped!">Shipping Request</a>

每个组件由&符号(&amp;)分隔。只有初始电子邮件地址后面的第一个组件在&符号前面有一个问号(?)。

网址编码是关键!因此,对于您的身体示例,而不是您的

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

......你可以试试:

href='mailto:me@me.com?subject=Me&body=%3cb%3eME%3c%2fb%3e'

这是您可能尝试的另一条路线。创建一个javascript函数来打开一个ActiveX对象。这具有仅在IE和Outlook中工作的不幸限制,并且可能导致您的页面显示activex警告。但如果你能忍受这些警告,它就能完成这项工作。这是一个可以从中抽取的工作样本:

<html>
    <head>
        <script type='text/javascript' language='javascript'>
            function OpenOutlookNewEmail()
            {
                try
                {
                    var outlookApp = new ActiveXObject("Outlook.Application");
                    var nameSpace = outlookApp.getNameSpace("MAPI");
                    mailFolder = nameSpace.getDefaultFolder(6);
                    mailItem = mailFolder.Items.add('IPM.Note.FormA');
                    mailItem.Subject = "Me";
                    mailItem.To = "me@me.com";
                    mailItem.HTMLBody = "<b>ME</b>";
                    mailItem.display(0);
                }
                catch (e)
                {
                    alert(e);
                    // act on any error that you get
                }
            }
        </script>
    </head>
    <body>
        <a href='javascript:OpenOutlookNewEmail()' >email</a>
    </body>
</html>