HowTo: Senden von Emails testen ohne Mailserver
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("from@test.de", "to@test.de");
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: from@test.de X-Receiver: to@test.de MIME-Version: 1.0 From: from@test.de To: to@test.de 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.

























Christian sagt
am 17. März 2009 @ 09:03
Hi Robert,
Danke dir!
danke für diesen Artikel. Ich hab sonst immer den SMTP Server aufgesetzt, Konto angelegt…
Super Tipp der ne Menge Zeit erspart
Noch ein Christian sagt
am 17. März 2009 @ 11:44
Wow, danke für diesen Artikel.
Andre Loker sagt
am 17. März 2009 @ 13:10
Hi,
Der Tipp ist tatsächlich nützlich. Wobei natürlich der SmtpClient im Controller nichts zu suchen hat. Dann eher z.B. ein IMailSender injizieren (im unit test mocken) und die SmtpClient-spezifische Implementierung des Interfaces dann mit deinem Tipp testen. Oder halt ggf. noch weiter vom Senden der Email abstrahieren.
Grüße,
Andre
Robert Mühsig sagt
am 17. März 2009 @ 13:14
Ist richtig – nur wollte ich das Beispiel bewusst simpel halten und nicht noch DI oder Mocking hier rein packen
HowTo: Health Monitoring mit ASP.NET | Code-Inside Blog sagt
am 17. März 2009 @ 23:17
[...] Testen kann man auch einen anderen ASP.NET Trick anwenden – damit braucht man keinen SMTP [...]
.NET Oldenburg Blog » E-Mail ohne Mailserver in ASP.NET testen sagt
am 18. März 2009 @ 11:18
[...] Gefunde habe ich den Link/Tipp bei Robert Mühsig: HowTo: Senden von Emails testen ohne Mailserver [...]
Test-Emails ohne Emailserver « Murratore’s Weblog sagt
am 18. März 2009 @ 16:07
[...] HowTo: Senden von Emails testen ohne Mailserverhttp://code-inside.de/blog/2009/03/16/howto-senden-von-emails-testen-ohne-mailserver/#more-1863 [...]
Daily Blog Post 03/18/2009 « Murratore’s Weblog sagt
am 19. März 2009 @ 00:21
[...] HowTo: Senden von Emails testen ohne Mailserver | Code-Inside Blog [...]
HowTo: SMTP Server auf dem Windows Server 2008 installieren | Code-Inside Blog sagt
am 30. Oktober 2009 @ 23:21
[...] Wenn man keinen SMTP Server installieren möchte (z.B. auf seiner Entwicklungsumgebung), dann kann man die “Mail” Funktion auch über einen anderen Trick gut testen: HowTo: Senden von Emails testen ohne Mailserver [...]