Próbuję wysyłać wiadomości e-mail zawierające znaki spoza zestawu ASCII przy użyciu klas SmtpClient
i MailMessage
.Kodowanie obiektu w SmtpClient/MailMessage
Korzystam z zewnętrznej usługi pocztowej (MailChimp), a niektóre z moich e-maili zostały odrzucone przez ich serwer SMTP. I skontaktował się z nimi i to, co oni odpowiedzieli:
Wydaje linia przedmiotem jest Base64 zakodowane i następnie quoted-printable kodowane, co generalnie powinno być dobrze, ale jeden z bohaterów jest złamany w dwóch liniach . Jeśli więc linie tematyczne są nieco dłuższe, aby je poprawnie przetworzyć, są podzielone na dwie linie. Podczas używania cytowanego w temacie UTF-8 do wydrukowania w wierszu tematu, ciągi znaków nie powinny być przerywane między wierszami. Zamiast tego należy skrócić linię, aby cały łańcuch znaków pozostał razem. W tym przypadku tak się nie dzieje, więc ciąg znaków, który reprezentuje pojedynczy znak, jest łamany w wielu wierszach i dlatego nie jest poprawnie zakodowany w formacie UTF-8, który można wydrukować.
Problematyczny przedmiotem jest następujący:
Subject: XXXXXXX - 5 personnes vous ont nommé guide
Który jest w UTF-8/Base64:
Subject: WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3DqSBndWlkZQ==
Bo nagłówek przekroczy pewną maksymalną długość (jestem pewien niezależnie od tego, czy jest to kodowanie z możliwością zadeklarowania do druku, czy ograniczenie do 76 znaków w linii lub limit nagłówka SMTP), po kodowaniu i dzieleniu nagłówek stanie się:
Subject: =?utf-8?B?WFhYWFhYWCAtIDUgcGVyc29ubmVzIHZvdXMgb250IG5vbW3D?=
=?utf-8?B?qSBndWlkZQ==?=
Podobno powoduje to problem podczas dekodowania (ponieważ pierwszego wiersza nie można odszyfrować do poprawnego ciągu znaków). Nie jestem pewien, czy w pełni rozumiem problem, i mam następujące pytania:
- Dlaczego jest? Utf-8? B? część powtórzona? Czy kodowanie QP nie powinno się zdarzyć przed podziałem linii, a zatem jego nagłówek nie powinien się powtarzać?
- Po dekodowaniu QP, czy nie powinniśmy otrzymać poprawnego 1-liniowego łańcucha Base64?
- Na początku drugiej linii jest spacja, która wykracza poza kodowanie QP, czy to może być problem?
- Czy enkoder jest uszkodzony, czy jest to dekoder?
Należy również pamiętać, że niektóre inne serwery SMTP zaakceptują tę wiadomość, ale to nie znaczy, że jest ona ważna.
W ramach obejścia problemu próbowałem wyłączyć kodowanie Base64, co wydaje się niepotrzebne, jednak klasa MailMessage ma właściwość BodyTransferEncoding, która kontroluje to kodowanie, ale tylko dla części treści wiadomości. Żadna właściwość nie wydaje się kontrolować kodowania "transferu" podmiotu.
Obejście problemu nie działa dla mnie. Moje nie-ascetyczne postacie wciąż pojawiają się jako "dziwacznie wyglądające symbole" w temacie. :( – PussInBoots
Możesz mieć inny problem.Mine nie było z dziwnie wyglądającymi postaciami, ale wiadomości e-mail są odrzucane przez niektóre serwery SMTP. –
o tak, dobrze wiedzieć. – PussInBoots