Igor Milovanović

.NET, cats and more...

  Home  |   Contact  |   Syndication    |   Login
  62 Posts | 10 Stories | 44 Comments | 56 Trackbacks

News

 

 


Add to Google

eXTReMe Tracker

visited 17 states (7.55%)
Create your own visited map of The World or Try another interesting project

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 on Monday, September 27, 2004 7:12 PM

Feedback

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

That's really cool. Thanks for sharing.

Dave


# re: A Simple SMTP Server Mock for .NET 10/24/2005 11:16 AM Dadi Ingolfsson
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

# re: A Simple SMTP Server Mock for .NET 3/10/2007 11:05 PM David Luu
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?

# re: A Simple SMTP Server Mock for .NET 7/29/2008 10:56 PM Salome Alejandro Mancilla-Chavez
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

Post Feedback

Title:
Name:
Email: (never displayed)
Url:
Comments: 
Please add 1 and 6 and type the answer here: