ATTnnnnn.txt allegati quando e-mail viene ricevuto in Outlook
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?
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