Estou tentando enviar um e-mail multipart / html relacionado com imagens GIF incorporadas. Este e-mail é gerado usando Oracle PL / SQL. Minhas tentativas falharam, com a imagem aparecendo como um X vermelho (no Outlook 2007 e no yahoo mail)
Eu tenho enviado emails em html há algum tempo, mas meus requisitos agora são usar várias imagens GIF no email. Posso armazená-los em um de nossos servidores web e apenas criar um link para eles, mas muitos clientes de e-mail de usuários não os mostram automaticamente e precisarão alterar as configurações ou baixá-los manualmente para cada e-mail.
Então, meu pensamento é incorporar a imagem. Minhas perguntas são:
- O que eu estou fazendo errado aqui?
- A abordagem de incorporação é a correta?
- Alguma outra opção se eu precisar usar mais e mais imagens? Os anexos não funcionam, pois as imagens são normalmente logotipos e ícones que não farão sentido fora do contexto da mensagem. Além disso, alguns elementos do e-mail são links para um sistema online, portanto, gerar um PDF estático e anexá-lo não funcionará (pelo que eu sei).
snippet:
MIME-Version: 1.0
To: me@gmail.com
BCC: me@yahoo.com
From: email@yahoo.com
Subject: Test
Reply-To: email@yahoo.com
Content-Type: multipart/related; boundary="a1b2c3d4e3f2g1"
--a1b2c3d4e3f2g1
content-type: text/html;
<html>
<head><title>My title</title></head>
<body>
<div style="font-size:11pt;font-family:Calibri;">
<p><IMG SRC="cid:my_logo" alt="Logo"></p>
... more html here ...
</div></body></html>
--a1b2c3d4e3f2g1
Content-Type: image/gif;
Content-ID:<my_logo>
Content-Transfer-Encoding: base64
Content-Disposition: inline
[base64 image data here]
--a1b2c3d4e3f2g1--
Muito Obrigado.
BTW: Sim, eu verifiquei que os dados base64 estão corretos, pois posso incorporar a imagem no próprio html (usando o mesmo uso de algoritmo para criar dados de cabeçalho) e ver a imagem no Firefox / IE.
Devo também notar que NÃO se trata de spam, os e-mails são enviados para clientes específicos que o esperam diariamente. O conteúdo é orientado por dados e não por anúncios.
<img src="URL" />
funcionou para mim, mas era uma imagem que eu hospedava fora do local. Isso não funciona para você?Respostas:
Tente inseri-lo diretamente, desta forma você pode inserir várias imagens em vários locais no e-mail.
E para tornar esta postagem útil para outros: Se você não tem uma string de dados base64, crie uma facilmente em: http://www.motobit.com/util/base64-decoder-encoder.asp a partir de um arquivo de imagem .
O código-fonte do e-mail é parecido com isto, mas eu realmente não posso dizer para que serve esse limite:
// EDITAR: Ah, acabei de perceber que se você inserir o primeiro trecho de código da minha postagem para escrever um e-mail com o thunderbird, o thunderbird altera automaticamente o código html para se parecer muito com o segundo código da minha postagem.
fonte
A outra solução é anexar a imagem como anexo e, em seguida, referenciá-la ao código html usando cid.
Código HTML:
Código C #:
fonte
Não acho nenhuma das respostas aqui úteis, então estou fornecendo minha solução.
O problema é que você está usando
multipart/related
como tipo de conteúdo, o que não é bom neste caso. Estou usandomultipart/mixed
e dentro delemultipart/alternative
(funciona na maioria dos clientes).A estrutura da mensagem deve ser a seguinte:
Então vai funcionar
fonte
Se não funcionar, você pode tentar uma dessas ferramentas que convertem a imagem em uma tabela HTML (porém, tome cuidado com o tamanho da sua imagem):
fonte
Usar Base64 para incorporar imagens em html é incrível. No entanto, observe que as strings de base64 podem aumentar o tamanho do seu e-mail.
Portanto,
1) Se você tiver muitas imagens, enviá-las a um servidor e carregá-las do servidor pode diminuir o tamanho do seu e-mail. (Você pode obter muitos serviços gratuitos por meio do Google)
2) Se houver apenas algumas imagens em seu e-mail, usar strings em base64 é definitivamente uma opção incrível.
Além das opções fornecidas pelas respostas existentes, você também pode usar um comando para gerar uma string base64 no linux:
fonte
Eu sei que esta é uma postagem antiga, mas as respostas atuais não abordam o fato de que o Outlook e muitos outros provedores de e-mail não suportam imagens embutidas ou imagens CID. A maneira mais eficaz de colocar imagens em emails é hospedá-los online e colocar um link para ele no email. Para pequenas listas de e-mail, uma caixa de depósito pública funciona bem. Isso também mantém o tamanho do e-mail baixo.
fonte
Você precisa de 3 limites para que as imagens embutidas sejam totalmente compatíveis.
Tudo vai dentro do
multipart/mixed
.Em seguida, use
multipart/related
para conter seusmultipart/alternative
cabeçalhos de anexo de imagem e seu.Por último, inclua seus anexos para download dentro do último limite de
multipart/mixed
.fonte
Na verdade, há um post de blog muito bom que lista prós e contras de três abordagens diferentes para este problema por Martyn Davies. Você pode lê-lo em https://sendgrid.com/blog/embedding-images-emails-facts/ .
Eu gostaria de adicionar uma quarta abordagem usando imagens de fundo CSS.
Adicionar
ao corpo do seu e-mail e uma classe css como:
fonte
Para aqueles que não conseguiram fazer com que uma dessas soluções funcionasse: Enviar imagem embutida por e-mail Seguindo os passos descritos na solução oferecida por @ T30, consegui fazer com que minha imagem embutida fosse exibida sem ser bloqueada pelo Outlook (métodos anteriores ela estava bloqueada) . Se você estiver usando o Exchange como nós, também fazemos:
você precisará transmiti-lo ao host de url do serviço de troca. Além de seguir esta solução deve permitir que você envie facilmente imagens incorporadas.
fonte
Pode ser interessante que tanto o Outlook quanto o Outlook Express possam gerar esses formatos de e-mail de imagem com várias partes, se você inserir os arquivos de imagem usando a função de menu Inserir / Imagem.
Obviamente, o tipo de e-mail deve ser definido como HTML (não texto simples).
Qualquer outro método (por exemplo, arrastar / soltar ou qualquer invocação de linha de comando) resulta no envio das imagens como um anexo.
Se você enviar esse e-mail para si mesmo, poderá ver como ele está formatado! :)
FWIW, estou procurando um executável autônomo do Windows que faz imagens embutidas no modo de linha de comando, mas parece não haver nenhum. É um caminho que muitos percorreram ... Pode-se fazer isso, digamos, com o Outlook Express, passando um arquivo .eml formatado apropriadamente.
fonte
A seguir está o código de trabalho com duas maneiras de conseguir isso:
fonte
Uma dica adicional ao post de Pavel Perna que me ajudou muito (não posso comentar sobre minha reputação, é por isso que posto como resposta): Em algumas versões do Microsoft Exchange, a disposição de conteúdo inline é removida ( veja este post da Microsoft ). A imagem simplesmente não faz parte do e-mail que o usuário vê no Outlook. Como alternativa, use "Content-Disposition: attachement". O Outlook 2016 não mostrará imagens como anexos que são usados na mensagem de correio, embora usem o "Content-Disposition: attachement".
fonte
Se você estiver usando o Outlook para enviar uma imagem estática com hiperlink, uma maneira fácil seria usar o Word.
fonte