2009-03-27 14 views
7

He escrito un cliente SMTP que envía correos electrónicos con archivos adjuntos. Todo está bien, excepto que cuando Outlook recibe un correo electrónico enviado por mi programa, muestra dos archivos adjuntos: el archivo realmente enviado y un archivo con dos caracteres CR y LF dentro y este archivo tiene el nombre ATT ?????. Txt.Adjuntos ATTnnnnn.txt cuando se recibe un correo electrónico en Outlook

He hecho la búsqueda - encontré muchas coincidencias como this para problemas similares y compruebo todo lo que pude. Aún más, comparé dos correos electrónicos enviados por mi programa y enviados por Opera, y no puedo deducir la diferencia. Sin embargo, lo que Opera envía se interpreta correctamente, pero lo que envía mi programa no lo es. Lo que envía mi programa es interpretado correctamente por un conjunto de otros clientes de correo, pero no por Outlook.

He hecho telnet'et al servidor SMTP, recuperado los dos correos electrónicos en un archivo de texto, uno de mi programa, otro de Opera, y los comparé uno al lado del otro. No vi ninguna diferencia que pudiera afectar la interpretación de un cliente de correo electrónico.

Aquí está un ejemplo de mensaje (direcciones sustituidos, el contenido del archivo cortadas, líneas en blanco exactamente como aparecen en los mensajes reales, las líneas nunca exceden los 80 caracteres):

 
To: [email protected], [email protected] 
Subject: subject 
Content-Type: multipart/mixed; boundary="------------boundary" 
MIME-Version: 1.0 

--------------boundary 
Content-Type: text/plain; charset="utf-8" 
Content-Transfer-Encoding: base64 

here goes the Base64 encoded text part - it may be localized, so 
it's better to UTF8 it and do Base64 

--------------boundary 
Content-Disposition: attachment; filename="file.jpg" 
Content-Type: application/octet-stream; name="file.jpg" 
Content-Transfer-Encoding: base64 

here goes the Base64 encoded file data 

--------------boundary 

Traté de jugar con saltos de línea después de la última frontera - Probé ninguno, uno, dos, tres, pero esto no mejora la situación.

¿Existe un conjunto de algunas limitaciones raras que un cliente de correo debe seguir para producir mensajes interpretados correctamente por Outlook?

+0

¿Se puede publicar el mensaje exacto que su cliente SMTP genera? Estoy bastante seguro de que cometió un error en algún lugar de los encabezados del mensaje. – Tomalak

+0

¿No debería haber un "-------------- boundary--" al final? (Tenga en cuenta los dos guiones adicionales) – Tomalak

+0

Sí, sí, ¡son los dos guiones adicionales al final! Nunca he leído esto en ningún documento y es una completa sorpresa para mí. – sharptooth

Respuesta

13

La última frontera de una parte MIME debe indicarse añadiendo dos guiones:

 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="------------boundary" 

--------------boundary 
... 

--------------boundary 
... 

--------------boundary-- 

Más leyendo aquí: RFC1341/7.2 The Multipart Content-Type

Cuestiones relacionadas