mailto link com o corpo HTML


319

Eu tenho alguns mailtolinks em um documento HTML.

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

Posso inserir HTML formatado corpo na mailto:parte da href?

<a href="mailto:me@me.com?subject=Me&body=<b>ME</b>">Mail me</a>

Observe que (2016) no iOS, é perfeitamente bom adicionar <i>e <b>marcar uma formatação simples em negrito e itálico.


1
Tinha exatamente a mesma coisa em mente e estudou por um tempo. Eu estava tentando ter um <img> remoto incorporado no corpo da mensagem. A instrução mailto precisa ser codificada em URL para que funcione. O resultado com o Thunderbird foi que o corpo do HTML apareceu literalmente, com todas as instruções <img> e tudo. Eu acho que esse é um problema de segurança no Thunderbird e na maioria dos clientes de email - eles analisam o conteúdo de email para que ele não faça nada de suspeito.
— Hannes R.

4
O melhor que pude encontrar veio desta página, zaposphere.com/html-email-links-code . No final da página, aparece uma lista: "Outras personalizações legais que a maioria dos outros sites não menciona !!" Me ajudou muito.
— Stu Andrews

Você pode definir todas as partes de um email com texto básico. Com relação às limitações que html formatação não é possível, aqui está uma ferramenta que eu construído para fazer a personalização dos vários campos em um simples mailto mortos: mailto.now.sh
— Dawson B

Respostas:


428

Como você pode ver na RFC 6068 , isso não é possível:

O <hfname>"corpo" especial indica que o associado <hfvalue> é o corpo da mensagem. O valor do campo "corpo" deve conter o conteúdo da primeira parte do texto / corpo sem formatação da mensagem. O pseudo campo de cabeçalho "body" é destinado principalmente à geração de mensagens curtas de texto para processamento automático (como mensagens de "inscrição" para listas de endereçamento), não para corpos MIME gerais.


4
A resposta @JoeBlow ainda está correta. A RFC 6068, que obsoleta 2368, ainda diz que o corpo é um texto simples.
— Markus Laire

8
Se você está decepcionado com a resposta, por favor, continue lendo: stackoverflow.com/a/46699855/256272 (tl; dr arquivos .eml)
— Joe

95

Não. Isso não é possível.


1
Não é estritamente verdade. Embora o suporte seja muito escasso, outras respostas mostraram que é possível um pouco de HTML limitado no iOS e uma combinação do IE + ActiveX + Outlook (urgh, eca).
— Simon East

89

Embora NÃO seja possível usar HTML para formatar o corpo do email, você pode adicionar quebras de linha, conforme sugerido anteriormente.

Se você é capaz de usar o javascript, "encodeURIComponent ()" pode ser útil como abaixo ...

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:x@y.com?body=" + encodeURIComponent(formattedBody);
window.location.href = mailToLink;

1
Os clientes de email podem executar Javascript incorporado? O OP diz que este é um email, não uma página da Web na qual o link mailto: estará.
— wide_eyed_pupil

graças, em Rails você pode usar a raw("text \n more text \n\n\t")função para texto encapsular e ter este convertido em quebras de linha e guias para o corpo e-mail
— FireDragon

Isso funcionou para mim, enviando de um "mailto" do Chrome para o Outlook. Observe que você deve codificar apenas o texto do corpo, não toda a cadeia mailto; e você não precisa de espaços antes / depois do \n.
— Lucas

2
Eu gostei desta abordagem, aqui está uma jsFiddle para vê-lo em ação: jsfiddle.net/oligray/5uosngy4
— Oliver Grey

3
Você também pode usar% 0A para uma quebra de linha, para não precisar fazer isso com JavaScript.
— Dirk Boer

58

Eu usei isso e parece funcionar com o Outlook, não usando html, mas você pode formatar o texto com quebras de linha pelo menos quando o corpo é adicionado como saída.

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

2
Então "% 0D" é uma nova linha. O que é equivalente ao código de uma guia codificada?
— wide_eyed_pupil

3
% 0D é uma nova linha que é ctrl-m, uma guia é ctrl-i que é% 09. Dê uma olhada em um gráfico ASCII como este [ asciitable.com/index/asciifull.gif] . Os caracteres de controle são de 1 a 31. @wide_eyed_pupil
— Jim Bergman

2
Qualquer assinatura parece ser removida ao fazer isso.
— Valentin Despa

% 0A seria \ n
— Klemen Tušar 14/10

3
Isso não é um corpo HTML!
— Chloe

46

Não é exatamente o que você deseja, mas é possível usar o javascript moderno para criar um arquivo EML no cliente e transmiti-lo ao sistema de arquivos do usuário, que deve abrir um e-mail rico contendo HTML em seu programa de e-mail, como o Outlook:

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

Aqui está um jsfiddle de um email contendo imagens e tabelas: 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
Agora que é uma idéia chique
— Greg

2
Idéia legal, mas apenas para o registro, na mais recente Apple Mail, este arquivo será aberto, mas não será editável / sendable, ele age como um registro enviado e-mail
— pmarreck

1
Com o Apple Mail (11.2), depois de abrir o arquivo .eml, você pode selecionar Mensagem / Enviar novamente no menu (shift-cmd-D) para colocar o email no modo de edição.
— Jeff Collier

31

Algumas coisas são possíveis, mas não todas, digamos, por exemplo, que você queira quebras de linha, em vez de usar <br />use%0D%0A

Exemplo:

<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
Isso não é HTML ... texto estático.
— Brad

não se você formatar seu email usando $ mailheader. = "Tipo de conteúdo: text / html; charset = iso-8859-1 \ r \ n";
— Stephen Kaufman

12
@StephenKaufman - não é você quem envia o email, mas os clientes que clicam no link. Isso significa que você não sabe como o cliente de email está definido. Você não sabe como seus cabeçalhos são definidos. Isso funcionará em alguns clientes de email e em outros.
— Narxx

1
obrigado, essa foi a segunda melhor opção para mim, se não posso fazer html, pelo menos posso fazer retornos de carro. por mim tudo bem.
— hamish

16

Vale ressaltar que no Safari no iPhone, pelo menos, a inserção de tags HTML básicas como <b>, <i>e <img>(que idealmente você não deve mais usar em outras circunstâncias, de qualquer forma, preferindo CSS) no parâmetro body no mailto:parece trabalho - eles são homenageados no cliente de email. Não realizei testes exaustivos para verificar se isso é suportado por outros combos de cliente de e-mail para navegador móvel ou de desktop. Também é duvidoso que isso seja realmente compatível com os padrões. Pode ser útil se você estiver construindo para essa plataforma.

Como outras respostas observaram, você também deve usar encodeURIComponent em todo o corpo antes de incorporá-lo no mailto:link.


Sim, ele funciona perfeitamente para adicionar tags simples em negrito e itálico - no iOS de qualquer maneira.
— Fattie

No iOS, não consigo enviar o email correto com <img src = 'mybase64' /> - no Gmail, vejo base64 na minha mensagem.
— Vitaly Zdanevich 6/02/19


0

Eu tenho o mesmo problema em relação ao compartilhamento de html. Eu faço abaixo do trabalho html para mim. Substitua <por <&> por>.

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

Nota: Funciona apenas no ubuntu. Não vai funcionar no Windows.


-1

Qualquer um pode tentar o seguinte (a função mailto aceita apenas texto sem formatação, mas aqui mostrarei como usar as propriedades HTML innertext e como adicionar uma âncora como parâmetros do corpo 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

É possível inserir valores unicode para inserir novas linhas (ou seja:), \u0009mas as tags HTML têm vários graus de suporte e devem ser evitadas.


-11

Eu trabalhei desta maneira:

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

A saída seria:

Hello
World  
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.