enlace mailto con cuerpo HTML


Tengo un par de enlaces mailto en un documento HTML.

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

¿Puedo insertar el cuerpo con formato HTML en la parte mailto: de href?

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

Tenga en cuenta que (2016) en iOS, está perfectamente bien agregar etiquetas <i> y <b> para un formato simple en cursiva y negrita.

Author: BalusC, 2011-04-11

10 answers

Como se puede ver en RFC 6068 , esto no es posible en absoluto:

El especial <hfname> "cuerpo" indica que el asociado <hfvalue> es el cuerpo del mensaje. El valor del campo" cuerpo " está destinado a contiene el contenido de la primera parte de texto / cuerpo plano de la mensaje. El campo pseudo encabezado" body " está destinado principalmente a la generación de mensajes de texto cortos para el procesamiento automático (tales como mensajes de" suscripción " para listas de correo), no para MIME general cuerpo.

 380
Author: Alfonso Marin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 15:19:40

No. Esto no es posible en absoluto.

 95
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-11 11:01:31

Si bien NO es posible usar HTML para formatear el cuerpo de su correo electrónico, puede agregar saltos de línea como se ha sugerido anteriormente.

Si usted es capaz de utilizar javascript entonces "encodeURIComponent()" podría ser de utilidad como a continuación...

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:[email protected]?body=" + encodeURIComponent(formattedBody);
window.location.href = mailToLink;
 65
Author: Oliver Pearmain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-09 16:38:54

He utilizado esto y parece funcionar con Outlook, no usando html, pero puede formatear el texto con saltos de línea al menos cuando se agrega el cuerpo como salida.

<a href="mailto:[email protected]?subject=Hello world&body=Line one%0DLine two">Email me</a>
 46
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-23 11:04:04

Algunas cosas son posibles, pero no todas, digamos por ejemplo que desea saltos de línea, en lugar de usar <br />use %0D%0A

Ejemplo:

<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>                        
 17
Author: Stephen Kaufman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-18 14:07:23

Vale la pena señalar que en Safari en el iPhone, al menos, insertar etiquetas HTML básicas como <b>, <i>, y <img> (que idealmente no debería usar en otras circunstancias de todos modos, prefiriendo CSS) en el parámetro body en el mailto: parece funcionar - se honran dentro del cliente de correo electrónico. No he hecho pruebas exhaustivas para ver si esto es compatible con otros combos de navegador/cliente de correo electrónico móviles o de escritorio. También es dudoso si esto es realmente compatible con los estándares. Sin embargo, podría ser útil si está construyendo para esa plataforma.

Como han señalado otras respuestas, también debe usar encodeURIComponent en todo el cuerpo antes de incrustarlo en el enlace mailto:.

 16
Author: Andrew Ferrier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-17 14:38:40

No es exactamente lo que quieres, pero es posible usar javascript moderno para crear un archivo EML en el cliente y transmitirlo al sistema de archivos del usuario, que debería abrir un correo electrónico enriquecido que contenga HTML en su programa de correo, como Outlook:

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

Aquí hay un jsfiddle de un correo electrónico que contiene imágenes y tablas: 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);
})();
 14
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-12 01:11:12

Es posible introducir valores unicode para insertar nuevas líneas (es decir: '\u0009'), pero las etiquetas HTML tienen diferentes grados de soporte y deben evitarse.

 -2
Author: Ryan Dunphy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-13 19:54:50

He trabajado de esta manera:

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

La salida sería:

Hello
World  
 -6
Author: Ravi Solanki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-22 09:58:47

Así es como agregas todo a un enlace de 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>

Cada componente está separado por el signo ampersand ( & ). Solo el primer componente después de la dirección de correo electrónico inicial tiene un signo de interrogación (?) precediendo al ampersand.

¡Codificar URL es la clave! Así que para su ejemplo de un cuerpo, en lugar de su

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

...usted puede intentar:

href='mailto:[email protected]?subject=Me&body=%3cb%3eME%3c%2fb%3e'

Aquí hay otra ruta que puedes probar. Cree una función javascript para abrir un objeto ActiveX. Esto tiene el desafortunada limitación de solo trabajar en IE y Outlook, y puede hacer que su página muestre advertencias activex. Pero si puedes vivir con estas advertencias, hace el trabajo. Aquí hay una muestra de trabajo de la que puede extraer:

<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>
 -27
Author: Benjamin Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-24 07:25:37