SmtpMail Med ASP.net


13 April 2002 @ 20:59

I denne artikler bliver der kastet lys på hvordan man udnytter de indbyggede funktioner i .NET Frameworket til at afsende mails


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>



Valid XHTML 1.0!