Da sich die Mailklasse in ASP.NET 2.0 ja stark verändert hat von System.Web.Mail zu System.Net.Mail waren noch ein paar Fragen offen wie diverse Properties zu belegen sind. Desweiteren ist an Funktionalität auch einiges hinzugekommen (Asynchroner Versand, Attachments, usw.).
Hier ein kleines Beispiel in C#:
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
...
try
{
SmtpClient mySmtpClient = new SmtpClient("mein.smtpserver.de");
// set smtp-client with basicAuthentication
mySmtpClient.UseDefaultCredentials = false;
System.Net.NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential("username", "password");
mySmtpClient.Credentials = basicAuthenticationInfo;
// add from,to mailaddresses
MailAddress from = new MailAddress("test@error.de", "TestFromName");
MailAddress to = new MailAddress("test2@error.de", "TestToName");
MailMessage myMail = new System.Net.Mail.MailMessage(from, to);
// add cc
MailAddress copy = new MailAddress("test3@error.de");
myMail.CC.Add(copy);
// add bcc
MailAddress bcc = new MailAddress("test4@error.de");
myMail.Bcc.Add(bcc);
// add ReplyTo
MailAddress replyto = new MailAddress("reply@error.de");
myMail.ReplyTo = replyto;
// set Subject and encoding
myMail.Subject = "Testnachricht...";
myMail.SubjectEncoding = System.Text.Encoding.UTF8;
// set body-message and encoding
myMail.Body = "<b>Testmail</b><br>mit HTML und Anhang in 2.0";
myMail.BodyEncoding = System.Text.Encoding.UTF8;
// text or html
myMail.IsBodyHtml = true;
// add attachments (1..n)
Attachment at = new Attachment("C:\\attachment.jpg");
myMail.Attachments.Add(at);
// send normal
mySmtpClient.Send(myMail);
}
catch (SmtpException ex)
{
throw new ApplicationException
("SmtpException has occured: " + ex.Message);
}
catch (Exception ex)
{
throw ex;
}
...
Zu beachten ist die unterschiedliche Behandlung der Mailadressen, CC und Bcc werden einfach hinzugefügt (für mehrere Ccs, Bccs einfach weitere mit .Add hinzufügen), für eine andere Antwortadresse wird ReplyTo direkt gesetzt. Wird keine Authentifizierung benötigt z.B. localhost, entfällt das Setzen der Credentials.
Die Credentials lassen sich alternativ auch in der web.Config setzen:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network defaultCredentials="False" host="mein.smtpserver.de" password="pass" port="25"
userName="user" />
</smtp>
</mailSettings>
</system.net>
Mit Attachments.Add können beliebige Anhänge hinzugefügt werden, die IsBodyHtml-Property entscheidet über text oder html-Nachrichtenformat.
Wenn man das Ganze in eine eigene Klasse verpackt und entsprechende Eventhandler hinzufügt, ist auch der asynchrone Versand über mySmtpClient.SendAsync() möglich.
mySmtpClient.SendCompleted +=
new SendCompletedEventHandler(SendCompletedHandler);
mySmtpClient.SendAsync(myMail, myMail.To.ToString()); //identify with to-address
...
void SendCompletedHandler(System.Object sender,
AsyncCompletedEventArgs e)
{
//Code to process the completion
}
msdn System.Net.Mail Class
Codeguru Beispiel
Geschrieben am ,