Poslat e-mail z .NET aplikace není žádná velká věda. Stačí zavolat System.Net.Mail.SmtpMail.Send. Ale posílat maily způsobem korektním a dlouhodobě udržitelným, to je větší oříšek. Zveřejnil jsem proto open source knihovnu, která řeší obvyklé problémy s tím spojené.

Dobrý systém pro rozesílání zpráv by měl mít následující vlastnosti:

Kromě toho platí vše, co pro .NET aplikace všeobecně. Tedy maximální využití existujících standardů a infrastruktury, což zjednoduší zapojení do existujících struktur.

Altairis Mail Toolkit

Na základě zkušeností z předchozích projektů jsem vytvořil jednoduchou, ale celkem mocnou, komponentu jménem Altairis Mail Toolkit. Je k dispozici včetně zdrojového kódu a dokumentace na CodePlexu. Řeší všechny výše uvedené problémy, s použitím standardních .NETových technik.

Veškeré informace o formátu a textu mailů jsou uloženy ve standardních resource souborech. To elegantně řeší veškeré problémy spojené s lokalizací a umístěním textů zpráv mimo kód. Automaticky zajišťuje například možnost, aby text překládal neprogramátor jiným nástrojem, než Visual Studiem.

Samotné rozesílání mailů za nás řeší .NET Framework, stačí ho jenom správně nastavit. Obšírnější pojednání o významu hlaviček From, Reply-To a Sender jest nalézti v RFC 2822 a v poněkud zjednodušené formě jsem jej sepsal na CodePlexu (anglicky).

Konfigurace je řešena pomocí standardního .NET konfiguračního modelu, pomocí vlastní konfigurační sekce altairis.mailToolkit.

Vytváření šablon v resource souborech

Pro každou šablonu, tj. typ odesílaného mailu, je třeba vytvořit dva resource klíče. Jejich názvy začínají názvem šablony a následuje konfigurovatelný suffix – standardně Subject pro předmět zprávy a Body pro její text.

Šablona může obsahovat placeholdery v klasickém tvaru dle metody String.Format, tj {0} atd.

Kromě toho mohou existovat ještě další dva resource klíče, opět s konfigurovatelnými názvy, standardně _SubjectFormat a _BodyFormat (včetně úvodních podtržítek). Ty určují formát celé zprávy (předmětu a těla). Obsahují právě jeden placeholder {0}, kam se vloží celý zbytek textu.

Načítání resources z cizí assembly je pravděpodobně technicky nejkomplikovanější úkon, zbytek je technologicky triviální.

Odesílání mailů

Vlastní odeslání mailů z kódu realizují dvě metody statické třídy Altairis.MailToolkit.Mailer. Jmenují se SendTemplatedMessage a SendTemplatedMessages. Každá z nich má sbírku overloadů pro různé příležitosti, jejichž kompletní dokumentace je k dispozici online.

Pokud použijete overload se specifikací jazyka (CultureInfo), použije se příslušně lokalizovaná verze. Pokud je jazyk nastaven na null nebo se použije overload bez jeho určení, použije se aktuální UiCulture.

Komponentu Altairis Mail Toolkit si včetně zdrojového kódu a dokumentace můžete stáhnout na altairismailtoolkit.codeplex.com.