Ao criar mensagens de e-mail, você deve definir o Tipo de conteúdo para multipart/alternative
quando enviar HTML e TEXT ou multipart/mixed
quando enviar TEXT e anexos.
Então, o que você faz se deseja enviar HTML, Texto e anexos? Use ambos?
email
smtp
content-type
mime
Xeoncross
fonte
fonte
Respostas:
Eu enfrentei esse desafio hoje e achei essas respostas úteis, mas não suficientemente explícitas para mim.
Edit : Acabei de encontrar o e- mail do Apache Commons que encerra isso muito bem, o que significa que você não precisa saber abaixo.
Se sua exigência for um email com:
A única estrutura que encontrei que funciona com o Gmail / Outlook / iPad é:
E o código é:
E um exemplo de como usá-lo no Gmail
fonte
"<" id-left "@" id-right ">"
.Use
multipart/mixed
com a primeira parte comomultipart/alternative
e peças subsequentes para os anexos. Por sua vez, usetext/plain
etext/html
peças dentro damultipart/alternative
peça.Um cliente de e-mail capaz deve reconhecer a
multipart/alternative
parte e exibir a parte de texto ou parte html, conforme necessário. Também deve mostrar todas as peças subseqüentes como peças de fixação.O importante a ser observado aqui é que, nas mensagens MIME de várias partes, é perfeitamente válido ter partes dentro de partes. Em teoria, esse aninhamento pode se estender a qualquer profundidade. Qualquer cliente de email com capacidade razoável deve poder processar recursivamente todas as partes da mensagem.
fonte
multipart/alternative
corretamente. A última entrada é a parte da melhor / mais alta prioridade, então você provavelmente deseja colocar atext/html
parte como a última subparte. Por RFC1341 .multipart/related
e quando usar isso?multipart/alternative
indica que apenas uma das partes incluídas deve ser exibida - por exemplo, uma parte étext/plain
e uma parte étext/html
. Portanto, o cliente de email não deve exibir as duas partes, mas apenas uma. ou seja, eles não estão relacionados.multipart/related
indica que as várias subpartes fazem parte da parte raiz principal, por exemplo, a parte principal étext/html
e as subpartes são imagens incorporadas. Veja aqui para mais informações.mutt
cliente CLI para verificar se configurou corretamente suas mensagens MIME de várias partes. Se você pressionarv
enquanto visualiza uma mensagem, ela será exibida e permitirá a travessia da árvore aninhada de partes MIME.As mensagens têm conteúdo. O conteúdo pode ser texto, html, DataHandler ou Multipart, e pode haver apenas um conteúdo. As multipartes possuem apenas BodyParts, mas podem ter mais de um. As BodyParts, como as Mensagens, podem ter conteúdo que já foi descrito.
Uma mensagem com HTML, texto e um anexo pode ser visualizada hierarquicamente assim:
E o código para criar essa mensagem:
fonte
Eu bati nesta edição. Essa arquitetura (da resposta de Lain) funcionou para mim. Aqui está a solução em Python.
Aqui está a principal função de criação de email:
Aqui está o código completo para enviar um email contendo html / text / attachment:
fonte
Com base no exemplo de Iain, tive uma necessidade semelhante de compor esses emails com texto sem formatação separado, HTML e vários anexos, mas usando PHP. Como estamos usando o Amazon SES para enviar emails com anexos, a API atualmente exige que você crie o email do zero usando a função sendRawEmail (...).
Depois de muita investigação (e maior do que a frustração normal), o problema foi resolvido e o código-fonte PHP publicado, para que ele possa ajudar outras pessoas com um problema semelhante. Espero que isso ajude alguém - a tropa de macacos que eu forcei a trabalhar nesse problema agora está esgotada.
Código-fonte PHP para enviar e-mails com anexos usando o Amazon SES.
fonte
$boundary
contêm corpo inteiro com anexos, mas apenas$boundary2
HTML ou texto sem formatação. Solução genial. Diga-me, por favor, esta é sua solução para o envio de texto sem formatação. Essa é uma mensagem alternativa se o cliente de email não suportar HTML? Obrigado!Ótima resposta Lain!
Eu fiz algumas coisas para fazer isso funcionar em um conjunto mais amplo de dispositivos. No final, listarei os clientes nos quais testei.
Eu adicionei um novo construtor de compilação que não continha os anexos de parâmetro e não usava MimeMultipart ("mixed"). Não é necessário misturar se você estiver enviando apenas imagens embutidas.
No método addTextVersion, adicionei charset ao adicionar conteúdo, isso provavelmente poderia / deveria ser passado, mas apenas o adicionei estaticamente.
O último item foi adicionado ao método addImagesInline. Eu adicionei a configuração do nome do arquivo da imagem no cabeçalho pelo código a seguir. Se você não fizer isso, pelo menos no cliente de e-mail padrão do Android, ele terá imagens embutidas com o nome de Desconhecido e não fará o download automaticamente e o apresentará no e-mail.
Então, finalmente, esta é a lista de clientes em que testei. Outlook 2010, Outlook Web App, Internet Explorer 11, Firefox, Chrome, Outlook usando o aplicativo nativo da Apple, Email passando pelo Gmail - Cliente de email do navegador, Internet Explorer 11, Firefox, Chrome, cliente de email padrão Android, cliente de email padrão osx IPhone, Gmail cliente de email no Android, cliente de email do Gmail no iPhone, email através do Yahoo - cliente de email do navegador, Internet Explorer 11, Firefox, Chrome, cliente de email padrão do Android, cliente de email padrão do osx IPhone.
Espero que ajude mais alguém.
fonte
Aqui está o melhor: Mensagem MIME de várias partes / mista com anexos e imagens embutidas
E imagem: https://www.qcode.co.uk/images/mime-nesting-structure.png
Esquema multipart / relacionado / alternativo
fonte
Subtipo misto
Subtipo alternativo
Fonte
fonte