risposta-alla-domanda-sullo-sviluppo-web-bd.com

collegamento mailto con il corpo HTML

Ho un paio di collegamenti mailto in un documento HTML.

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

Posso inserire un corpo formattato in HTML nella parte mailto: di href?

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

Si noti che (2016) in iOS, è perfettamente corretto aggiungere tag <i> e <b> per la semplice formattazione in corsivo e in grassetto.

280
GxG

Come puoi vedere in RFC 6068 , questo non è affatto possibile:

Lo speciale <hfname> "body" indica che il <hfvalue> associato è il corpo del messaggio. Il valore del campo "corpo" è destinato a contenere il contenuto per la prima parte di testo/corpo normale del messaggio. Il campo pseudo-intestazione "body" è principalmente inteso per la generazione di brevi messaggi di testo per l'elaborazione automatica (come i messaggi "subscribe" per le mailing list), non per i corpi MIME generali.

399
Alfonso Marin

No. Questo non è affatto possibile.

94
Quentin

Anche se NON è possibile utilizzare l'HTML per formattare il corpo dell'email, è possibile aggiungere interruzioni di riga come suggerito in precedenza.

Se sei in grado di usare javascript allora "encodeURIComponent ()" potrebbe essere utile come sotto ...

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

Ho usato questo e sembra funzionare con Outlook, non utilizzando HTML, ma è possibile formattare il testo con interruzioni di riga, almeno quando il corpo viene aggiunto come output.

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

Non è proprio quello che vuoi, ma è possibile utilizzare il javascript moderno per creare un file EML sul client e inviarlo al file system dell'utente, il quale dovrebbe aprire una posta elettronica ricca contenente HTML nel loro programma di posta, come Outlook:

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

Ecco un jsfiddle di un'email contenente immagini e tabelle: 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);
})();
27
Matthew

Alcune cose sono possibili, ma non tutte, diciamo ad esempio che vuoi interruzioni di riga, invece di usare <br />use %0D%0A

Esempio:

<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>                        
23
Stephen Kaufman

Vale la pena ricordare che su Safari su iPhone, almeno, inserire tag HTML di base come <b>, <i> e <img> (che idealmente non dovresti usare in altre circostanze comunque, preferendo i CSS) nel parametro body nel mailto: sembra funzionare - sono onorato nel client di posta elettronica. Non ho fatto test esaustivi per vedere se questo è supportato da altri combo di browser o client di posta elettronica mobile o desktop. È anche dubbio che questo sia davvero conforme agli standard. Potrebbe essere utile se stai costruendo per quella piattaforma, però.

Come hanno notato altre risposte, dovresti utilizzare anche encodeURIComponent sull'intero corpo prima di inserirlo nel collegamento mailto:.

16
Andrew Ferrier

Chiunque può provare quanto segue:

//Create as many html elements you need.

const titleElement = document.createElement("DIV");
titleElement.innerHTML = this.shareInformation.title;

//Here I create an <a> so I can use href property
const titleLinkElement = document.createElement("a");
titleLinkElement.href = this.shareInformation.link; // This is an http url

...

let mail = document.createElement("a");

// Using es6 template literals add the html elements created to mail element body
mail.href = 
  `mailto:?subject=${titleElement.innerText}&body=${titleLinkElement}%0D%0A${abstractElement.innerText}`;
mail.click();
0