Emails mit .NET zu versenden ist recht einfach, wenn es allerdings darum geht, den generierten Emailtext zu testen, dann wird es manchmal etwas schwierig.
Vor allem wenn das Entwicklungssystem keinen Zugriff auf den richtigen Email-Server hat, geht es meist nur auf "gut Glück".
Es gibt allerdings einen einfachen Web.Config Eintrag der es erheblich vereinfacht - die PickupDirectoryLocation.
Democode
Der Code zum verschicken einer Mail (in einer ASP.NET MVC ActionMethod) :
public ActionResult SendMail() { SmtpClient smtpClient = new SmtpClient(); MailMessage mailMessage = new MailMessage("[email protected]", "[email protected]"); mailMessage.Subject = "Test-Subject"; mailMessage.Body = "Test-Body"; smtpClient.Send(mailMessage); return View("Index"); }
In der web.config folgende Einstellung:
Produktivsystem
<system.net> <mailSettings> <smtp> <network host="mail.example.com"/> </smtp> </mailSettings> </system.net>
Entwicklungssystem
<system.net> <mailSettings> <smtp deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="c:\temp\maildrop\"/> </smtp> </mailSettings> </system.net>
Die "PickupDirectoryLocation" nimmt allerdings nur einen absoluten Pfad entgegen. Wenn man nun den Code aufruft, dann werden die Emails in den angegebenen Verzeichnis abgelegt:
X-Sender: [email protected] X-Receiver: [email protected] MIME-Version: 1.0 From: [email protected] To: [email protected] Date: 16 Mar 2009 20:52:55 +0100 Subject: Test-Subject Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Test-Body
Damit lässt sich die Emailgenerierung auch ohne SMTP Server testen.
Den Tipp habe ich von dieser Seite - da ich ihn ständig wieder Suche, habe ich ihn jetzt ebenfalls auch gebloggt ;)
Wichtig ist noch, dass ASP.NET Schreibrechte auf dem Verzeichnis hat.