ссылка mailto с телом HTML


у меня есть пара mailto ссылки в HTML-документе.

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

могу ли я вставить тело в формате HTML в mailto: часть href?

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

обратите внимание, что (2016) в iOS, это совершенно нормально, чтобы добавить <i> и <b> теги для простого курсивного, полужирного форматирования.

10 238

10 ответов:

Как вы можете видеть в RFC 6068, это вообще невозможно:

специальный <hfname> "тело" указывает, что соответствующий <hfvalue> это тело сообщения. Значение поля" тело " предназначено для содержать контент, на первый текстовую часть тела сообщение. Поле псевдо заголовка" body " в первую очередь предназначено для генерация коротких текстовых сообщений для автоматической обработки (например как "подписаться" на сообщения для списков рассылки), не для общего мима тела.

нет. Это вообще невозможно.

хотя невозможно использовать 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;

я использовал это, и это, кажется, работает с outlook, не используя html, но вы можете форматировать текст с разрывами строк, по крайней мере, когда тело добавляется в качестве вывода.

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

некоторые вещи возможны, но не все, скажем, например, вы хотите разрывы строк, а не использовать <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>                        

стоит отметить, что в Safari на iPhone, по крайней мере, вставляются основные HTML-теги, такие как <b>,<i> и <img> (который в идеале вы больше не должны использовать в других обстоятельствах, предпочитая CSS) в параметр body в mailto: кажется, работает - они соблюдаются в почтовом клиенте. Я не сделал исчерпывающего тестирования, чтобы увидеть, поддерживается ли это другими мобильными или настольными браузерами/почтовыми клиентами. Также сомнительно, действительно ли это соответствующий стандартам. Может быть полезно, если вы строите для этой платформы, хотя.

как отметили другие ответы, вы также должны использовать encodeURIComponent на всем теле, прежде чем встраивать его в mailto: ссылка.

это не совсем то, что вы хотите, но с помощью современного 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>95.00</td>
    </tr>
    <tr>
        <td>OU812</td>
        <td>9</td>
        <td>95.00</td>
    </tr>
    <tr>
        <td>OU812</td>
        <td>9</td>
        <td>95.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);
})();

можно ввести значения unicode для вставки новых строк (т. е.: '\u0009'), но HTML-теги имеют различную степень поддержки и их следует избегать.

Я работал таким образом:

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

вывод:

Hello
World  

вот как вы добавляете все в ссылку 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>

каждый компонент разделен знаком амперсанда ( & ). Только первый компонент после первоначального адреса электронной почты имеет знак вопроса (?), предшествующего амперсанд.

URL-кодирование является ключом! так что для вашего примера тела, а не вашего

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>