Hvordan sender man E-mail med ASP.net
af Anders Bodeval Carlsen
Har du arbejdet med ASP har du sikker også
stiftet bekendskab med flere forskellige mailkomponenter, for ikke
at tale om forskellige versioner af disse komponenter. Heldigvis
har vi haft Jmail, som efterhånde er blevet standard på en ISS server
til at afsende web-mail.
Men med ASP.net bliver det meget nemmerer, for nu er funktioner til af
afsende mail indbygge i .Net Frameworket. Du ikke længre bruge tid på
at tilpasse dit script til diverse serverer.
Se her hvor let og elegant det kan gøre med to liniers kode:
SmtpMail.SmtpServer = "smtp.codebehind.dk";
SmtpMail.Send("anders@codebehind.dk", "anders@codebehind.dk", "Mit emne", "Hej verden");
Bruger du ISS serverens indbyggede mail kan du oven i købet undlade den første linie kode som angiver mail-serveren.
Ellers er det jo lige ud af landevejen. Send skal have
afsenders email, modtagers email, subjekt (emne) og body (indhold) som
argument. Både afsender og modtager skal angives, ellers får du
en fejl.
Det er værd at bemærke at SmtpServer er static. Det har den praktiske
betydning, at ændre du SmtpServer i et script på serveren så vi den
blive ændret i alle andre. Derfor vil det være en god praksis
altid at angive SmtpServer, selvom man som nævnt kan undlade det. Enten
med navnet på SmtpServeren eller ved at skrive:
SmtpMail.SmtpServer = "", Hvis man ønsker at bruge IIS-serverens indbyggede mailserver.
Afsenders navn i adressefeltet.
I ovenstående eksempel vil afsenders email-adresse stå i afsender
feltet når man modtager e-mailen. Ønsker du istedet at der skal
stå afsenders navn, så det bliver mere Outlook agtigt, kan du skrive
f.eks.
"Anders Carlsen <anders@bodeval.dk>" . Email adressen angives
imellem et "større end" - tegn og et "mindre end" - tegn.
SmtpMail.SmtpServer = "smtp.codebehind.dk";
SmtpMail.Send("Anders Carlsen<anders@codebehind.dk>", "anders@codebehind.dk", "Mit emne", "Hej verden");
Det samme kan naturligtvis gøres med modtager adressen. Det er ikke
noget specielt for ASP.net men noget som er indbygget i email
protokollen eller fælles standarten for email.
SimpelSmtpMail.aspx
<%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Web.Mail" %>
<html><head><title>Simple SmtpMail</title></head>
<script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs E) {
SmtpMail.SmtpServer = "dinSmtpServer"; SmtpMail.Send("Dit Navn<afsender@test.dk>",
"modtager@test.dk", "Simple SmtpMail Test", "hej med dig");
}
</script> <body><h1>E-Mail er Sendt!</h1></body> </html>
MailMessage
SmtpMail.Send metoden har to overloadede metodekald.
public static void Send(string, string, string, string); som er anvendt i ovenstående eksempel og et metode-kald med klassen Mail.MailMessage.
public static void Send(Mail.MailMessage);
Vil du sende e-mail med html tekst, sætte
prioriteten eller at vedhæfte en fil, skal du bruge
sidstnævnet metodekald.
Det kræver lidt mere end to liniers kode, men er lige så let at have med at gøre.
MailMessage mailMsg = new MailMessage(); < BR >
mailMsg .From = "Anders Carlsen <anders@codebehind.dk>";
mailMsg .To = "Anders Carlsen <anders@codebehind.dk>";
mailMsg .Subject = "Test af SmtpMail";
mailMsg .Body = "Hej verden";
Du opretter et MailMessage objekt.
Herefter kan du igen sende e-mailen med kald af Send metoden.
SmtpMail.SmtpServer = "smtp.codebehind.dk";
SmtpMail.Send(mailMsg);
Denne gang med MailMsg som argument.
E-mail Prioritet
mailMsg .Priority = MailPriority.High;
Prioriteten sættes med MailPriority . MailPriority.High, MailPriority.Normal (default) og MailPriority.Low.
Vedhæftede filer
MailAttachment MyAttachment = new MailAttachment("C:\\temp\\Minfil.jpg");
mailMsg.Attachments.Add(MyAttachment);
Først oprettes et MailAttachment objekt , herefter tilføjes det til mailMsg's filliste.
Du kan tilføje så mange filer som du ønsker.
Almindelig tekst e-mail eller HTML e-mail
Mail formatet sættes med MailFormat, enten Html eller Text (default)
mailMsg.BodyFormat = MailFormat.Html;
Fejlhåndtering
Det hænder at ens mail server er "nede", men der kan også være
andre årsager til at der opstår fejl i afsendelsen
af e-mailen. F.eks. hvis afsender adressen ikke kendes af
mail-serveren.
Hvis mailserveren melder fejl i afsendelsen af e-mailen vil der blive kastet en HttpException.
Fejl håndteres i en try catch blok:
try {
SmtpMail.Send (mailMsg ); Overskrift.InnerHtml = "E-Mail er Sendt!";
} catch (Exception e) {
Overskrift.InnerHtml = "Der opstod fejl i afsendelsen af E-Mail"; }
Selvfølgeligt skal e-mail adresserne også valideres, men det er noget jeg ville gøre før afsendelses tidspunketet. Min næste artikel vil vise et eksempel på webmail med ASP.net og her vil validering af e-mail adresser med Regular Expressions indgå. SmtpMail.aspx
<%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Web.Mail" %>
<html><head><title>SmtpMail</title></head> <script language="C#" runat="server">
public void Page_Load(Object sender, EventArgs E) {
MailMessage mailMsg = new MailMessage(); mailMsg .From = "Anders Carlsen<anders@bodeval.dk>"; mailMsg .To = "Anders Carlsen<anders@bodeval.dk>"; mailMsg .Subject = "Test af SmtpMail"; mailMsg .Body = "<h1>Hej Verden</h1>"; mailMsg .Priority = MailPriority.High; // Low, Normal mailMsg.BodyFormat = MailFormat.Html; MailAttachment MyAttachment = new MailAttachment("C:\\temp\\Minfil.jpg"); mailMsg.Attachments.Add(MyAttachment);
SmtpMail.SmtpServer = "smtp.codebehind.dk";
try { SmtpMail.Send (mailMsg );
Overskrift.InnerHtml = "E-Mail er Sendt!"; }
catch (Exception e) { Overskrift.InnerHtml = "Der opstod fejl i afsendelsen af E-Mail";
}
} </script>
<body>
<h1 id="Overskrift" runat="server"></h1> </body> </html>
|