2009-03-27 24 views
7

Napisałem klienta SMTP, który wysyła wiadomości e-mail z załącznikami. Wszystko jest w porządku, z wyjątkiem tego, że kiedy e-mail wysłany przez mój program jest odbierany przez program Outlook wyświetla dwa załączniki - plik faktycznie wysłany i plik z dwoma znakami CR i LF wewnątrz i ten plik ma nazwę ATT ?????. Txt.Załączniki ATTnnnnn.txt po otrzymaniu wiadomości e-mail w programie Outlook

Poszukałem - znalazłem wiele meczów, takich jak this dla podobnych problemów i sprawdziłem wszystko, co mogłem. Co więcej - porównałem dwa e-maile - wysłane przez mój program i wysłane przez Operę i nie mogę wywnioskować różnicy. Jednak to, co Opera wysyła, jest interpretowane poprawnie, ale to, co mój program wysyła, nie jest. To, co mój program wysyła, jest poprawnie interpretowane przez zestaw innych klientów pocztowych, ale nie przez program Outlook.

Mam telnet'et do serwera SMTP, ściągnąłem dwa e-maile do pliku tekstowego - jeden z mojego programu, drugi z Opery i porównałem je obok siebie. Nie widzę żadnej różnicy, która mogłaby wpłynąć na interpretację przez klienta poczty e-mail.

Oto przykładowa wiadomość (adresy podstawione, zawartość pliku przycięte, puste linie dokładnie tak, jak pojawiają się one w rzeczywistych wiadomości, linie nigdy przekraczać 80 znaków):

 
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 

Próbowałem grać z wierszami po ostatnim granicę - wypróbowany żaden, jeden, dwa, trzy, ale to nie poprawia sytuacji.

Czy istnieje zestaw dziwnych ograniczeń, które musi wykonać klient pocztowy, aby wygenerować wiadomości poprawnie interpretowane przez program Outlook?

+0

można zaksięgować dokładną wiadomość klient SMTP generuje? Jestem pewien, że popełniłeś błąd w nagłówkach wiadomości. – Tomalak

+0

Czy na końcu nie powinno być "-------------- granicy"? (Zwróć uwagę na dwa dodatkowe kreski) – Tomalak

+0

Tak, tak, to dodatkowe dwa kreski na końcu !!! Nigdy nie przeczytałem o tym w żadnych dokumentach i jest to dla mnie kompletna niespodzianka. – sharptooth

Odpowiedz

13

Ostatni granicę część MIME musi być wskazany przez dołączenie dwóch kresek:

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

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

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

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

więcej czytania tutaj: RFC1341/7.2 The Multipart Content-Type

Powiązane problemy