Het verzenden van een e-mail vanuit een eigen applicatie is niet moeilijk. De meest eenvoudige manier is waarschijnlijk om gebruik te maken van de standaard e-mailclient. Met slechts twee regels code toont u het e-mailvenster. De geadresseerde wordt automatisch gevuld en u kunt zelfs het onderwerp al invullen.
// Definieer de opdrachtregel
string email = "mailto:[email protected]?subject=Dit is een test";
// Start de standaard e-mailclient in een apart proces
System.Diagnostics.Process.Start( email );
Een krachtig gereedschap, maar het nadeel is dat er wel een e-mailclient, zoals Outlook of Windows Mail, op het systeem geïnstalleerd moet zijn.
Een tweede nadeel van deze manier van werken is dat de gebruiker nog steeds zelf op de knop Verzenden moet drukken. Het is dus geen volledig geautomatiseerd proces. Gelukkig kunt u dat met de klasse System.Net.Mail.SmtpClient wel realiseren.
using System.Net;
using System.Net.Mail;
// Maak het e-mailbericht
MailMessage emailBoodschap = new MailMessage();
// Stel afzender in
emailBoodschap.From = new MailAddress( "[email protected]", "Jan Jansen" );
// Voeg geadresseerden toe
emailBoodschap.To.Add( new MailAddress( "[email protected]", "Piet Pietersen" ) );
emailBoodschap.To.Add( "[email protected]" );
// Ook CC/BCC wordt ondersteund
emailBoodschap.CC.Add( new MailAddress( "[email protected]", "Gerard de Vries" ) );
// Onderwerp
emailBoodschap.Subject = "Dit is een test";
// Bericht
emailBoodschap.Body = "Hallo," + Environment.NewLine + "Dit is een test....";
// Stel prioriteit in
emailBoodschap.Priority = MailPriority.High;
// Voeg eventueel bijlagen toe
emailBoodschap.Attachments.Add( new Attachment( "C:\\EenBijlage.txt" ) );
emailBoodschap.Attachments.Add( new Attachment( "C:\\EenAndereBijlage.txt" ) );
SmtpClient emailVerzender = new SmtpClient( "mail.bedrijfsnaam.nl" );
// Verstuur het e-mailbericht
{
// Bij een beveiligde mailserver --> credentials opgeven
emailVerzender.Credentials = new NetworkCredential( "gebruikersnaam", "geheim" );
// Verstuur de email
emailVerzender.Send( emailBoodschap );
}
Het versturen van een e-mail bestaat uit twee stappen. Eerst bouwt u een bericht op, waarna u dit bericht verstuurt. U ziet dat het opbouwen van het bericht redelijk vanzelfsprekend is. U stelt afzender in. Dit kan een object van het type MailAddresszijn, zoals hierboven getoond, maar het kan ook simpelweg een e-mailadres zijn. Ditzelfde geldt voor de eigenschappen To, CC en BCC. Alleen betreft het in deze gevallen een array van het type MailAddress of string. Met behulp van de methode Add() voegt u hier geadresseerden aan toe. Door bestandsnamen aan de eigenschap Attachments toe te voegen, kunt u ook eventuele bijlagen meesturen. Over versturen gesproken: u kunt ook eventueel een gebruikersnaam en wachtwoord opgeven. Sommige mailservers vereisen dat uw identiteit geverifieerd wordt, om te voorkomen dat de mailserver voor spamdoeleinden wordt misbruikt. En uiteraard moet u het adres van de mailserver uit het codevoorbeeld vervangen door uw eigen mailserveradres.
Het is ook mogelijk om een e-mailbericht asynchroon te versturen. Daartoe maakt u gebruik van de methode SendAsync(). U kunt het event SendCompleted() afvangen om actie te ondernemen wanneer het bericht verzonden is. U dient bij het versturen een uniek kenmerk mee te geven. Dit kenmerk kunt u in de afhandeling van het eerder genoemde event weer uitlezen met behulp van e.UserState. Hierdoor kunt u het verzonden bericht identificeren. Om de events te kunnen afvangen, moet u natuurlijk wel een eventhandler koppelen aan de objectinstantie van de klasse SmtpClient.
using System.Net;
using System.Net.Mail;
// Maak het e-mailbericht
MailMessage emailBoodschap = new MailMessage();
// Stel afzender in
emailBoodschap.From = new MailAddress( "[email protected]", "Jan Jansen" );
...
SmtpClient emailVerzender = new SmtpClient( "mail.bedrijfsnaam.nl" );
emailVerzender.SendCompleted +=
new SendCompletedEventHandler( emailVerzender_SendCompleted );
// Verstuur het e-mailbericht
{
// Bij een beveiligde mailserver --> credentials opgeven
emailVerzender.Credentials = new NetworkCredential( "gebruikersnaam", "geheim" );
// Verstuur de email
emailVerzender.SendAsync( emailBoodschap, "EenUniekeID" );
}
// Vang event af bij asynchrone verzending
void emailVerzender_SendCompleted( object sender, AsyncCompletedEventArgs e ) {
Console.WriteLine( "Het volgende bericht is verzonden: {0}",
e.UserState.ToString() );
}