Domanda

Ho scritto un client SMTP che invia le e-mail con allegati. Va tutto bene, tranne che quando una e-mail inviata dal mio programma viene ricevuto da Outlook si visualizza due allegati - il file effettivamente inviato e un file con due caratteri CR e LF dentro e questo file ha nome ATT ????? txt..

Ho fatto ricerca - ho trovato un sacco di partite come questo per problemi simili e controllato tutto quello che potevo. Ancora più - ho confrontato due e-mail - inviato dal mio programma e inviato da Opera e non posso dedurre la differenza. Tuttavia ciò che Opera manda viene interpretato in modo corretto, ma ciò che il mio programma invia non lo è. Quello che il mio programma invia è interpretato da una serie di altri client di posta in modo corretto, ma non da Outlook.

Ho telnet'et al server SMTP, recuperai i due messaggi di posta elettronica in un file di testo - uno dal mio programma, un altro da Opera, e confrontato le side-by-side. Non ho visto alcuna differenza che potrebbe influenzare l'interpretazione da parte di un client di posta elettronica.

Ecco un esempio di messaggio (indirizzi sostituiti, il contenuto dei file ritagliate, righe vuote esattamente come appaiono nei messaggi reali, linee mai superare 80 caratteri):

To: user1@host.com, user2@host.com
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

Ho provato a giocare con linebreaks dopo l'ultima di confine - nessuno, uno, due, tre provato, ma questo non migliora la situazione

.

C'è un insieme di alcune limitazioni strani che un client di posta deve seguire per produrre messaggi che vengono interpretati da Outlook correttamente?

È stato utile?

Soluzione

L'ultima frontiera di una parte MIME deve essere indicato aggiungendo due trattini:

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

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

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

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

Più leggere qui: RFC1341 / 7.2 Il Content-Type in

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top