Igor Milovanović

.NET, cats and more...


News


Add to Google

eXTReMe Tracker

My Stats

  • Posts - 64
  • Comments - 62
  • Trackbacks - 52

Twitter












Recent Comments


Recent Posts


Article Categories


Archives


Post Categories


Image Galleries


Blogs I read


Communities


Links



A SMTP server mock is basically a fake SMTP server which can be used for unit testing of applications which send email messages. It acts as a real smtp server, except that  the incoming messages are locally stored and not actually delivered .  This can be quite usefull if you are using real data for testing. ;-) 

   1:  [Test]
   2:  public void MailTest ()
   3:  {
   4:      SmtpMock smtpServerMock = new SmtpMock ();
   5:      smtpServerMock.Start();
   6:      System.Web.Mail.SmtpMail.SmtpServer = "localhost";
   7:      System.Web.Mail.SmtpMail.Send("somebody@foo.com", "everybody@bar.com", "This is the subject", "This is the body.");
   8:      smtpServerMock.Stop ();
   9:   
  10:      Assert.AreEqual (1, smtpServerMock.Sessions.Count);
  11:      SmtpSession session = (SmtpSession) smtpServerMock.Sessions[0];
  12:      Assert.IsTrue (session.SessionProtocol.IndexOf("somebody@foo.com") > 0 );
  13:      Assert.IsTrue (session.SessionProtocol.IndexOf("everybody@bar.com") > 0 );
  14:      Assert.IsTrue (session.SessionProtocol.IndexOf("This is the subject") > 0 );
  15:      Assert.IsTrue (session.SessionProtocol.IndexOf("This is the body.") > 0 );
  16:   
  17:  }

Example: Unit-Test with SMTP-Server Mock

As I couldn't find a .NET implementation (take a look at dumbster for java version), I decided to write one myself. The implementation is very simple as it only opens a listener at port 25 and responds to pretty much anything with 250 OK. ;-) . The recieved emails are stored in SessionProtocol (see example).

[1] Dumbster - Fake SMTP Server for Java
[2] SmtpMock.cs

 


posted @ Monday, September 27, 2004 7:12 PM | Filed Under [ .NET ]

Comments

Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by David Totzke on 9/27/2004 7:34 PM
Igor,

That's really cool. Thanks for sharing.

Dave

Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by Dadi Ingolfsson on 10/24/2005 11:16 AM
Hi,

This is cool and I´d like to use it, but I get some error I´m unable to resolve.

If I run your example I get: "System.IndexOutOfRangeException : Index was outside the bounds of the array"

If I debug through it I get an exception on SmtpMail.Send that says:
"An unhandled exception of type "System.Net.Sockets.SocketException" occurred in Unknown Module. Additional information: Only one usage of each socket address (protocole/network address/port) is normally permitted".

Can you help me out here?

Best regards,
Dadi
Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by David Luu on 3/10/2007 11:05 PM
How to handle events such as on receipt of SMTP message (then do something), when sending application is external (not part of, as in your example) to mock SMTP server?
Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by Salome Alejandro Mancilla-Chavez on 7/29/2008 10:56 PM
I've used your example, I made the adjusment to make it work with .Net Framwork 3.5. But I still having an Issue, The STMPServer never stop, so my unit test never ends. can you tell me where might be the problem
Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by Shi Yan on 4/19/2009 11:58 PM
If you are running an integration test and not necessarily need an embedded SMTP server, there's an online fake SMTP server here:

http://www.ximailstop.com
Gravatar # re: A Simple SMTP Server Mock for .NET
Posted by The Stop takes forever on 8/15/2009 12:35 AM
I think the locking on "this" might be causing a big delay on methods invoked against the SimpleSmptpServer.

Post A Comment
Title:
Name:
Email:
Website:
Comment:
Verification: