O formato de E-mail correcto para E-mail simples, HTML e um anexo em SMTP?

O Problema:

tentei copiar os cabeçalhos/e-mails baseados em SMTP usados pelo yahoo e pelo hotmail e enviá-los através do Telnet, mas o e-mail que recebo não mostra o anexo incluído, mas mostra a mensagem correctamente.

O Que Suspeito está a causar isto.:

Eu acredito que tenho o formato incorreto para o e-mail, e apesar de pesquisar numerosos artigos on-line (bem como tentar compreender complicado e difícil de ler RFCs), eu não tenho encontrei quaisquer artigos úteis ou concisos que explicam como usar todos os três (simples, HTML e um anexo) no SMTP corretamente. Passei vários dias tentando alterar o código, mas ou obtenho apenas a mensagem (sem anexo) ou todo o corpo de dados SMTP que mostra (incluindo limites, código html, etc).

O Que espero conseguir com esta pergunta:

Espero que alguém possa ver a informação que recolhi abaixo, e ser capaz de me dizer o que sou. falta (ou como exatamente a formatação do E-mail é incorreta).

informação de depuração:

alimentei um duplicado da informação que enviei ao servidor de SMTP para ficheiro, e colei a informação ao pastebin (com todas as informações pessoais removidas / editadas - o anexo codificado de Base64 é apenas um ficheiro de texto de outro e-mail obtido do IMAP):

informação enviada literalmente (menos caracteres de controlo) para SMTP servidor:

Http://pastebin.com/QYwzWT0S

O Que Eu vejo no cliente de E-mail (nota sem Anexo):

Http://i45.tinypic.com/29b1zci.jpg

O que o IMAP vê ao transferir o e-mail (nota formato incorrecto):

Http://pastebin.com/zv3PBr8N

Como deve ser um e-mail formatado correctamente para IMAP:

Http://pastebin.com/3yBySbxU

Suspeito que o SMTP seja má interpretação do que estou enviando, e é por isso que o multipart/alternativa está faltando quando o IMAP tenta recuperar o e-mail. O que estou a fazer de errado? O que espera o servidor?

[[1]} [obrigado pelos upvotes - eu posso re-ativar os links!]

 4
Author: user1433767, 2012-06-03

2 answers

Limpei os especificadores de fronteiras multipart e consegui isto, o que funciona para mim no meu servidor (deixei aqui os comandos SMTP):

From: "Edited Out" <[email protected]> 
To: "Edited Out" <[email protected]> 
Subject: Testing 4
MIME-Version: 1.0
Content-Type: multipart/alternative;
  boundary="boundary-type-1234567892-alt"

--boundary-type-1234567892-alt
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


Testing the text to see if it works!

--boundary-type-1234567892-alt
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


<html>Does this actually work?</html>

--boundary-type-1234567892-alt
Content-Transfer-Encoding: base64
Content-Type: text/plain;name="Here2.txt"
Content-Disposition: attachment;filename="Here2.txt"

KiAxMyBGRVRDSCAoQk9EWVtURVhUXSB7NjU5fQ0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXw0    KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQoNCkp1c3Qgc2VlaW5nIHdoYXQgdGhpcyBhY3R1
YWxseSBjb250YWlucyEgCQkgCSAgIAkJICA9DQoNCi0tX2Y2YjNiNWVlLTIwN2EtNGQ3Yi04NDU4LTQ2OWJlZTQ5MThkYV8    NCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZG    luZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0N
Ci5obW1lc3NhZ2UgUA0Kew0KbWFyZ2luOjBweD0zQg0KcGFkZGluZzowcHgNCn0NCmJvZHkuaG1tZXNzYWdlDQp7DQpmb25    0LXNpemU6IDEwcHQ9M0INCmZvbnQtZmFtaWx5OlRhaG9tYQ0KfQ0KLS0+PC9zdHlsZT48L2hlYWQ+DQo8Ym9keSBjbGFzcz    0zRCdobW1lc3NhZ2UnPjxkaXYgZGlyPTNEJ2x0cic+DQpKdXN0IHNlZWluZyB3aGF0IHRo
aXMgYWN0dWFsbHkgY29udGFpbnMhIAkJIAkgICAJCSAgPC9kaXY+PC9ib2R5Pg0KPC9odG1sPj0NCg0KLS1fZjZiM2I1ZWU    tMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXy0tDQopDQpmbHlubmNvbXB1dGVyIE9LIEZFVENIIGNvbXBsZXRlZA


--boundary-type-1234567890-alt--

O especificador de limites num e-mail multipart é qualquer texto arbitrário que não é provável que apareça no corpo/anexos do E-mail. Quando ele aparece com dois traços na frente, que especifica o início da nova parte (incluindo a primeira parte. Quando aparece com dois traços no início e no fim, que especifica o fim do correio.

O SEU correio original tinha este marcador de "limite final" no meio do correio (logo a seguir a <html>Does this actually work?</html>), e tinha dois marcadores de limites diferentes (--boundary-type-1234567890 e --boundary-type-1234567892-alt). Isso explica porque o anexo foi deixado de lado.

 5
Author: ejdyksen, 2012-06-05 02:57:37
Parece que o problema é incrivelmente subtil.

O Hotmail convencionalmente (Este foi o e-mail original que o baseou em ), usa o termo "multipart/alternative" para várias partes do E-mail. Usei 'multipart / alternative' no meu email.

Acontece que o yahoo não gosta de 'multipart / alternative' e só irá mostrar correctamente o texto simples, o html e o anexo correctamente quando, em vez disso, é usado o termo 'multipart/mixed' (como reparei, os e-mails compatíveis com o yahoo usam este termo em vez de Alternativa), em combinação com a sugestão de ejdyksen (nenhuma sugestão funciona por si só para o servidor do yahoo embora).

Embora, tecnicamente falando, esta seja a resposta 'correcta', vou deixar a resposta de ejdyksen seleccionada porque os seus esforços tinham mostrado que era alguma tecnicalidade do lado do servidor (o seu servidor SMTP e o hotmail mostraram ambos o anexo, o yahoo não). Educadamente, vota a resposta de ejdyksen como ele fez a maior parte do trabalho.

 2
Author: user1433767, 2012-06-05 14:58:50