HowTo: Senden von Emails testen ohne Mailserver

imageEmails 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:

image

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.

[Download Democode]

9 Kommentare bisher »

  1. Christian sagt

    am 17. März 2009 @ 09:03

    Hi Robert,
    danke für diesen Artikel. Ich hab sonst immer den SMTP Server aufgesetzt, Konto angelegt…
    Super Tipp der ne Menge Zeit erspart :-) Danke dir!

  2. Noch ein Christian sagt

    am 17. März 2009 @ 11:44

    Wow, danke für diesen Artikel. :)

  3. 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

  4. 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 ;)

  5. 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 [...]

  6. .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 [...]

  7. 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 [...]

  8. 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 [...]

  9. 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 [...]

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name: (erforderlich)

eMail: (erforderlich)

Website:

Kommentar: