Wysyłam wiadomość e-mail za pomocą platformy dotnet. Oto szablon, którego używam do tworzenia wiadomości:
Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%
Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For: %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%
Gdy wiadomość zostanie odebrana w programie Outlook, program Outlook wyświetli komunikat „Usunięto dodatkowe podziały wierszy z tej wiadomości”. A komunikat wyświetla się w ten sposób:
Date of Hire: 9/28/2001
Annual Salary: $100,000
Reason for Request: New Hire
Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For: $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000
Zwróć uwagę, że program Outlook nieprawidłowo usuwa potrzebne podziały wierszy po nazwie, kwocie pokrycia EWG itp.
Ważne jest, aby odbiorcy wiadomości e-mail otrzymali prawidłowo sformatowaną wiadomość e-mail i muszę założyć, że niektórzy z nich używają programu Outlook 2003. Nie mogę również zakładać, że będą wiedzieć wystarczająco dużo, aby wyłączyć funkcję automatycznego czyszczenia, aby wiadomość została poprawnie sformatowana.
Widziałem te wiadomości w innych klientach poczty i wyświetlają się poprawnie
trochę więcej informacji:
- Używam UTF-8 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
- Treść msg.Body jest odczytywana z pliku tekstowego zakodowanego w UTF-8, a każda linia jest zakończona crlf.
Pytanie: Jak zmienić format wiadomości, aby uniknąć tego problemu?
\r\n
. U mnie to zadziałało.Odpowiedzi:
Rozpocznij każdy wiersz od 2 spacji, a program Outlook zostanie „oszukany” w celu zachowania formatowania.
Więc zmień
do
Oto artykuł, który znalazłem podczas badania tego problemu, który jest nieco głębszy niż moja odpowiedź.
źródło
Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Możesz również wstawić znak tabulacji na końcu linii (tuż przed CR LF). Ta dodatkowa biała przestrzeń będzie znajdować się na końcu linii i dlatego nie będzie widoczna dla użytkownika. Może wolisz wstawiać spacje po lewej stronie. Zwróć uwagę, że pojedyncza spacja nie wystarczy (chociaż może pomogłoby wiele spacji, nie wiem).
źródło
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
W tej odpowiedzi opisano, jak „wyłączyć” tę funkcję w programie Outlook Client.
Do Twojej wiadomości: Używam programu Outlook 2007
źródło
Zawsze miałem większe szczęście podczas formatowania e-maili jako html. Nadal możesz mieć problem z użytkownikami końcowymi, którzy muszą ustawić klienta na zezwalanie na format html, ale zazwyczaj są oni bardziej zaznajomieni z tym, ponieważ tak wiele wiadomości e-mail jest w formacie HTML. Masz też trochę więcej pracy nad dodaniem tagów HTML, ale efekt końcowy jest znacznie bardziej kontrolowany.
@ephemient sugeruje również: Wyślij zarówno jako HTML, jak i zwykły tekst. Dobrzy klienci pokażą to drugie, Outlook pokaże pierwszego, wszyscy są zadowoleni (z wyjątkiem programisty, który musi wykonać więcej pracy).
źródło
Dodanie „\ t \ r \ n” (\ t dla TAB) zamiast „\ r \ n” działało dla mnie w Outlooku 2010.
źródło
"\r\n "
(dwóch spacji, bez tabulatora) po nowej linii jako podobnego hacka. Działa w programie Outlook 2016. YMMV.Rozszerzając odpowiedź Douga L. , ponieważ myślę, że wiadomości HTML są jeszcze bardziej wszechobecne i akceptowane teraz niż w 2008 r., Kiedy opublikowano tę odpowiedź. Oto mały fragment kodu języka C # ułatwiający konwersję treści i wysyłanie wiadomości w formacie HTML:
źródło
Widzę ten sam problem podczas generowania wiadomości e-mail w postaci zwykłego tekstu, a następnie czytania jej w programie Outlook 2003 z dodatkiem SP3. Wygląda na to, że możesz uniknąć procesu usuwania, utrzymując długość linii poniżej 40 znaków. Nie zawsze może być praktyczne.
źródło
Umieść tekst w
<pre>
tagach, a program Outlook sformatuje i wyświetli tekst poprawnie.zdefiniowałem to w CSS inline w HTML Body, na przykład:
CSS:
Zdefiniowałem rodzinę czcionek, aby ustawić czcionkę.
HTML:
źródło
Automatyczne czyszczenie to funkcja programu Outlook, która usuwa dodatkowe przerwy w wierszach. Możesz temu zapobiec na dwa sposoby.
Pierwszym sposobem jest dodanie co najmniej 2 dodatkowych spacji przed wierszami podczas wysyłania wiadomości e-mail za pomocą kodu. Możesz dodać te dodatkowe spacje tylko przed tymi wierszami, które program Outlook automatycznie usuwa.
Drugim sposobem jest zmiana ustawienia perspektywy, która uniemożliwi programowi Outlook usuwanie dodatkowych podziałów wierszy.
źródło
Mój tekst zawiera „\ r \ n”, ale Outlook 2010 nie renderuje podziału wiersza. Utwórz tokeny wierszy rozdzielonych znakiem „\ r \ n” i znaczniki kopert za pomocą znaczników akapitu HTML. Format mojego e-maila to HTML. Generuję treść HTML dla mojego e-maila w poniższym kodzie.
źródło
Zmień zakończenie linii z crlf na cr lub lf.
Podejrzewam, że w górnej części wiadomości e-mail znajduje się tylko cr (lub lf), a Outlook oczekuje, że reszta wiadomości będzie miała ten sam format.
źródło