mailto ссылка с телом HTML - PullRequest
       28

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

282 голосов
/ 11 апреля 2011

У меня есть пара 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> для простого курсивного и жирного форматирования.

Ответы [ 11 ]

400 голосов
/ 16 ноября 2012

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

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

94 голосов
/ 11 апреля 2011

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

76 голосов
/ 09 мая 2012

Хотя невозможно использовать 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;
50 голосов
/ 23 февраля 2012

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

<a href="mailto:email@address.com?subject=Hello world&body=Line one%0DLine two">Email me</a>
29 голосов
/ 12 октября 2017

Это не совсем то, что вам нужно, но возможно с помощью современного 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>

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);
})();
23 голосов
/ 29 января 2014

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

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

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

0 голосов
/ 13 июня 2019

Каждый может попробовать следующее (функция 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
0 голосов
/ 22 ноября 2016

Я работал следующим образом:

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

Вывод будет:

Hello
World  
0 голосов
/ 13 сентября 2013

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

...