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

У меня есть несколько ссылок mailto в HTML-документе.

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

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

<a href="mailto:[email protected]?subject=Me&body=<b>ME</b>">Mail me</a>

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

В то время как HTML-формат не может использоваться для форматирования вашего тела электронной почты, вы можете добавить разрывы строк, как было предложено ранее.

Если вы можете использовать javascript, тогда "encodeURIComponent()" может быть полезен, как показано ниже...

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:[email protected]?body=" + encodeURIComponent(formattedBody);
window.location.href = mailToLink;

Ответ 4

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

<a href="mailto:[email protected]?subject=Hello world&body=Line one%0DLine two">Email me</a>

Ответ 5

Это не совсем то, что вы хотите, но с помощью современного javascript можно создать файл EML на клиенте и передать его в файловую систему пользователя, которая должна открыть в почтовой программе богатое письмо, содержащее HTML, например Outlook:

fooobar.com/questions/23406/...

Здесь jsfiddle электронного письма, содержащего изображения и таблицы: https://jsfiddle.net/seanodotcom/yd1n8Lfh/

HTML

<!-- https://jsfiddle.net/seanodotcom/yd1n8Lfh -->
<textarea id="textbox" style="width: 300px; height: 600px;">
To: User <[email protected]>
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);
})();

Ответ 6

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

Ответ 7

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

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

Ответ 9

Любой может попробовать следующее (функция mailto принимает только открытый текст, но здесь я покажу, как использовать свойства внутреннего текста HTML и как добавить привязку в качестве параметров mailto body):

//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

Ответ 10

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

Ответ 11

Я работал так:

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

Вывод:

Hello
World  

Ответ 13

Вот как вы добавляете все к ссылке MAILTO:

<a href="mailto:[email protected]? [email protected]&[email protected] &subject=Shipping%20Information%20Request&body=Please%20tell%20me%20if%20my%20order%20has%20shipped!">Shipping Request</a>

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

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

href='mailto:[email protected]?subject=Me&body=<b>ME</b>'

... вы можете попробовать:

href='mailto:[email protected]?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 = "[email protected]";
                    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>