V druhém, pravděpodobně posledním dílu se dozvíte, jak odesílat e-maily s přílohami a jak zobrazovat přiložené obrázky v těle e-mailu.
Dnes přímo navážu na předchozí díl a ukážu vám, jak snadné je odesílat e-maily s přílohami, jak zobrazovat přiložené obrázky v těle e-mailu a jak nastavit správný MIME typ přílohy pro zajištění správného zobrazení ve všech e-mailových kilentech.
Odesílání příloh
Klasickou přílohu reprezentuje třída System.Net.Mail.Attachment [ http://msdn2.microsoft.com/en-us/library/system.net.mail.attachment.aspx ], přes kterou můžete připojit fyzický soubor nebo objekt typu Stream [ http://msdn2.microsoft.com/en-us/library/system.io.stream.aspx ].
// vytvoření nové přílohy
System.Net.Mail.Attachment atach = new System.Net.Mail.Attachment("c:/soubor.jpg");
// nastavení MIME typu
atach.ContentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg;
// přiložení přílohy do zprávy
message.Attachments.Add(atach);
Velmi důležité je správné určení MIME typu přílohy – zabráníte tak možným komplikacím při zobrazování na straně klienta.
Nezapomínejte správně určit MIME typ přílohy, můžete tak zabránit případným chybám v zobrazení na straně klienta.
Zobrazení obrázku v těle e-mailu
Možná vás někdy zajímalo, jak vlastně fungují obrázkové propagační e-maily, spamy, když žádný obrázek není umístěn na externím serveru ani jako běžná příloha. Vše spočívá v tom, že zvláštnímu typu přílohy přiřadíte určité ContentId a následně zobrazíte obrázek v HTML zprávě.
public void SendMail()
{
// vytvoření nové zprávy
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(new System.Net.Mail.MailAddress("odesilatel@mail.cz", "Odesílatel"), new System.Net.Mail.MailAddress("prijemce@mail.cz", "Příjemce"));
// přiřazení dalšího příjemce - tímto bude mít zpráva 2 příjemce
message.To.Add(new System.Net.Mail.MailAddress("prijemce2@mail.cz", "Příjemce2"));
// předmět zprávy
message.Subject = "Vložený obrázek";
// určení typu zprávy
message.IsBodyHtml = true;
// přilinkování obrázku
System.Net.Mail.LinkedResource lres = new System.Net.Mail.LinkedResource(@"C:\soubor.jpg");
// přiřazení ContentId
lres.ContentId = "img";
// nastavení MIME typu
lres.ContentType.MediaType = System.Net.Mime.MediaTypeNames.Image.Jpeg;
// vytvoření alternativního zobrazení zprávy
System.Net.Mail.AlternateView aview = System.Net.Mail.AlternateView.CreateAlternateViewFromString(@"Tělo zprávy.<br><img src=""cid:img"">", null, "text/html");
// přiložení přilinkovaného obrázku
aview.LinkedResources.Add(lres);
// přiložení alternativního zobrazení ke zprávě
message.AlternateViews.Add(aview);
// vytvoření SMTP klienta
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.cz", 25);
// pokud je to potřeba, můžete provést přihlášení k SMTP serveru
smtp.Credentials = new System.Net.NetworkCredential("Username", "Password");
// nastavení metody odesílání
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
// můžete povolit nebo zakázat zabezpečené odeslání - některé SMTP servery nedovolují zabezpečené připojení
smtp.EnableSsl = false;
// odeslání vytvořené zprávy
smtp.Send(message);
}
Znovu jsem uvedl celý kód, abyste se mohli podívat na změny. Obrázek není připojený jako běžná příloha, ale jako System.Net.Mail.LinkedResource [ http://msdn2.microsoft.com/en-us/library/system.net.mail.linkedresource.aspx ], který se u klienta nezobrazí v seznamu příloh. I v tomto případě je dobré nastavit správný MIME typ. Není klasicky uvedené tělo zprávy message.Body, protože je vytvořený objekt System.Net.Mail.AlternateView [ http://msdn2.microsoft.com/en-us/library/system.net.mail.alternateview.aspx ], který po připojení ke zprávě celý obsah message.Body přepíše. Ve zvoleném konstruktoru AlternateView jsou tři parametry: text, kódování a MIME typ. Obrázek ve zprávě zobrazjete bežným tagem.
<img src="cid:img">
Jako src zvolte prefix cid: a následně ContentId, které jste přiřadili vašemu obrázku, v tomto případě je to img.
Závěrem
To je všechno, co jsem vám chtěl sdělit. Vaše dotazy pište do komentářů – mohou mě inspirovat k napsání dalšího dílu tohoto krátkého seriálu.