V
přechozím příspěvku jsem ukázal, jak využít Razor i mimo web aplikace. Nyní popíši, jak tohoto přístupu využít v případě, že chceme v aplikaci vytvořit email a ten poslat uživateli. Email bude obsahovat i obrázky a přílohu.
Vytvoření šablony pro email
Šablony jsou vlastně dvě. V první je vlastní obsah mailu a tato šablona využívá jinou jako svoji obálku - to je vhodné pro případy, kdy bude potřeba více emailů a všechny by měly mít například jednotný vzhled.
email.cshtml
@* Generator: Template *@
@functions{
public string Recipient { get; set; }
public string Sender { get; set; }
public string Content { get; set; }
}
@{ Layout = new emailLayout();}
<img alt="Logo" src="cid:logo" />
<table width="550" class="headerText">
<tr><td>Hello Mr.@Recipient</td></tr>
<tr><td>This is my message for you: @Content</td></tr>
<tr><td>Regards, @Sender</td></tr>
</table>
emailLayout.cshtml
@* Generator: Template *@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<style type="text/css">
body {
font-family: "Lucida Grande","Helvetica Neue",sans-serif;
font-size: 12px;
color: #333333;
background: White;
}
</style>
</head>
<body>
@RenderBody()
</body>
</html>
Vygenerování emailu
Získání HTML mailu je jednoduché - jak ze šablony vyrobit text už bylo ukázáno v předchozím díle, nyní jen použijeme metodu třídy AlternateView k získání HTML obsahu:
Code:
MailMessage mail = new MailMessage();
var htmlContent = (new email { Sender = "Martin", Recipient = "John", Content = "You win!!!" }).TransformText().Trim();
var htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, new ContentType("text/html"));
mail.AlternateViews.Add(htmlView);
Vkládání obrázků
V kódu šablon si můžete všimnout i značek pro zobrazení obrázků. Pokud má email obsahovat obrázky, máte tyto tři možnosti:
- v tagu img odkázát na existující, veřejně dostupný obrázek na sítí
- vložit obrázek do emailu a odkázat na něj v tagu img pomoci cid:název
- vložit obrázek jako base64
Z textu šablon vyplývá, že použiji druhou možnost - jako hodnotu ContentId použijeme hodnotu zadanou za cid: v src atributu příslušeného img tagu:
var attachResource = new LinkedResource(new MemoryStream(<byte[]>));
attachResource.ContentId = <resourceID>;
htmlView.LinkedResources.Add(attachResource);
Vkládání příloh
Pokud chceme k emailu přiložit i přílohu, jde to podobně jednoduše - nejprve si vytvoříme příslušný objekt a pak je přidáme do kolekce příloh mailu:
Attachment att = new Attachment(new MemoryStream(<byte[]>), attachmentName);
mail.Attachments.Add(att);
Tipy
Pro testování posílání emailů lze použít utilitku
Smtp4Dev a do config souboru aplikace přidáme následující nastavení:
<system.net>
<mailSettings>
<smtp from="mail@test.com">
<network host="localhost" port="25"/>
</smtp>
</mailSettings>
</system.net>
Výsledek
Po spuštění pak obdržíme email, který nás informuje o výhře:
A na závěr snad jen upozornění na možnost podívat a získat celý (zahrnuje i kód z prvního příspěvku na toto téma) funkční kód na
Codeplex a jako v předchozím díle je zde i
poster (stránka ve formátu A4 v pdf), který stručně shrnuje vše z tohoto příspěvku.
It also conveys useful information.
OdpovědětVymazathttps://automationminds.com