посилання поштового зв’язку з тілом HTML


319

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


1
Мав рівно те саме на увазі і деякий час його вивчав. Я намагався вставити пульт <img> в тіло повідомлення. Інструкція поштового зв'язку повинна бути кодована URL-адресою, щоб вона працювала. Результатом з thunderbird стало те, що тіло HTML з'явилося буквально, з усіма його <img> інструкціями та всіма іншими. Я думаю, що це питання безпеки для громовержців та більшості поштових клієнтів - вони розбирають вхідний поштовий контент, щоб він не робив нічого підозрілого.
Ганнес Р.

4
Найкраще, що я міг знайти з цієї сторінки, zaposphere.com/html-email-links-code .. Внизу наведено список: "Інші круті налаштування, які більшість інших веб-сайтів не згадують !!" Мені дуже допомогли.
Стю Ендрюс

Ви можете встановити кожну частину електронного листа з основним текстом. Що стосується обмежень щодо неможливості форматування html, то тут я створив інструмент, щоб зробити налаштування різних полів у мертвій пошті просто: mailto.now.sh
Доусон Б

Відповіді:


428

Як ви бачите в RFC 6068 , це взагалі неможливо:

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


4
@JoeBlow відповідь все ще правильна. RFC 6068, який застаріло 2368, все ще говорить, що корпус - це звичайний текст.
Маркус Лаар

8
Якщо ви розчаровані цією відповіддю, будь ласка, читайте : stackoverflow.com/a/46699855/256272 (tl; файли dr .eml)
Джо

95

Ні. Це взагалі неможливо.


1
Не зовсім вірно. Хоча підтримка дуже обмежена, інші відповіді показали, що деякий обмежений HTML можливий в iOS та комбінації 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? ОП каже, що це електронний лист, а не веб-сторінка, на якій буде посилання mailto:.
wide_eyed_pupil

дякую, в Rails ви можете використовувати raw("text \n more text \n\n\t")функцію для інкапсуляції тексту, і це перетворить на розриви рядків та вкладки для тіла електронної пошти
FireDragon

Це працювало для мене, надсилаючи з Chrome "mailto" в Outlook. Зверніть увагу, що ви повинні кодувати лише текст тексту, а не весь поштовий рядок; і вам не потрібно пробілів до / після \n.
Лука

2
Мені сподобався такий підхід, ось jsfiddle, щоб побачити його в дії: jsfiddle.net/oligray/5uosngy4
Олівер Грей

3
Ви також можете просто використовувати% 0A для рядкового рядка, тому вам не потрібно робити це з JavaScript.
Дірк Бур

58

Я використовував це, і, здається, працює з перспективою, не використовуючи html, але ви можете відформатувати текст з розривами рядків, принаймні, коли тіло додається як вихід.

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

2
Отже "% 0D" - це новий рядок. Що таке еквівалент кодованої вкладки?
wide_eyed_pupil

3
% 0D - це новий рядок, який є ctrl-m, вкладка ctrl-i, що становить% 09. Погляньте на діаграму ASCII на зразок цього [ asciitable.com/index/asciifull.gif] . Контрольні символи від 1 до 31. @wide_eyed_pupil
Джим Бергман

2
Здається, будь-який підпис видаляється.
Валентин Деспа

% 0A було б \ n
Клемен Тушар

3
Це не тіло HTML!
Хлоя

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>

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

8
Тепер це фантазія
Грег

2
Ідеальна ідея, але тільки для запису, на останній Apple Mail цей файл відкриється, але не піддається редагуванню / передачі. Він діє як надісланий запис електронної пошти
pmarreck

1
Якщо Apple Mail (11.2) відкрив файл .eml, ви можете вибрати повідомлення / відправити ще раз у меню (shift-cmd-D), щоб перевести електронну пошту в режим редагування.
Джефф Коллер

31

Деякі речі можливі, але не всі, наприклад, ви хочете розривати рядки, а не <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
Це не HTML ... все-таки текст.
Бред

не, якщо ви форматуєте електронну пошту за допомогою $ mailheader. = "Тип вмісту: text / html; charset = iso-8859-1 \ r \ n";
Стівен Кауфман

12
@StephenKaufman - ви не той, хто надсилає електронний лист, а клієнти, які натискають на посилання. Це означає, що ви не знаєте, як встановлено клієнт електронної пошти. Ви не знаєте, як встановлені його заголовки. Це працюватиме на деяких клієнтах електронної пошти, а не на інших.
Narxx

1
дякую, це був другий найкращий варіант для мене, якщо я не можу зробити html, то принаймні я можу зробити повернення каретки. добре мені.
Хеміш

16

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

Як зазначалося в інших відповідях, ви також повинні використовувати encodeURIComponent на всьому тілі, перш ніж вставляти його у mailto:посилання.


Так, це ідеально підходить для додавання простих жирних курсивних тегів - в iOS так чи інакше.
Fattie

У iOS я не можу надсилати правильний електронний лист із <img src = 'mybase64' /> - у Gmail я бачу base64 всередині свого повідомлення.
Віталій Зданевич


0

У мене є проблема щодо спільного використання html. Я роблю нижче html роботу для мене. Замініть <на <&> з>.

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

Примітка. Вона працює лише в ubuntu. Він не працюватиме у вікнах.


-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 мають різний ступінь підтримки, і цього слід уникати.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.