Geeks With Blogs
Igor Milovanović .NET, cats and more...

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 .NET | Back to top


Comments on this post: A Simple SMTP Server Mock for .NET

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
Igor,

That's really cool. Thanks for sharing.

Dave
Left by David Totzke on Sep 27, 2004 7:34 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
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
Left by Dadi Ingolfsson on Oct 24, 2005 11:16 AM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
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?
Left by David Luu on Mar 10, 2007 11:05 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
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
Left by Salome Alejandro Mancilla-Chavez on Jul 29, 2008 10:56 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
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
Left by Shi Yan on Apr 19, 2009 11:58 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
I think the locking on "this" might be causing a big delay on methods invoked against the SimpleSmptpServer.
Left by The Stop takes forever on Aug 15, 2009 12:35 AM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
Its a pretty cool & simple implementation. Going to help in testing email sending functionality. Thanks.
Left by Web Developer on Dec 09, 2009 9:51 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
@Salome Alejandro Mancilla-Chavez

It looks like the stop is called but the socket is still open so it just hangs. It’s a bit cheap but for a quick-fix I essentially made the session.Process synchronous so I could clear down the socket (with a ‘using’), as below:

while (true)
{
using (Socket clientSocket = _smtpListener.AcceptSocket())
{
SmtpSession session = new SmtpSession(clientSocket);
_sessions.Add(session);
Thread sessionThread = new Thread(session.Process);
sessionThread.Start();
while (sessionThread.IsAlive)
{
Thread.Sleep(200);
}
}
/*sessionThread.Join (); // remove comment for more sessions at the same time*/
}
Left by vman on Apr 06, 2011 9:06 PM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
Left by ralph lauren big pony polo on Jul 09, 2011 10:37 AM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
We are using Mailtrap - http://mailtrap.io web service.

It give you remote smtp server account and direct access to all mails in it.
Left by Bogdan Gusiev on Nov 30, 2011 9:23 AM

# re: A Simple SMTP Server Mock for .NET
Requesting Gravatar...
Orjinal Fx15 ile sağlıklı ve bitkisel kilo vermeniz artık hiçte zahmetli değil! Fx 15 in içeriği tamamen bitkisel kökenli karışımlar ile oluşmaktadır. Fx15 sayesinde doğal yönden hiç bir şekilde diyet ve zayıflama uğruna sizi terleticek aletler kullanmadan kilo verebilirsiniz. Sağlığınız için kesinlikle Orjinal fx15 kullanmanızı tavsiye etmekteyiz. Orjinal fx15'in içeriğinde bulunan bitkiler üzüm çekirdeği ekstresi, hücre zarlarını güçlendirir ve hücreleri oksidatif hasardan korur. Bu ürün hakkında olumlu veya olumsuz düşüncelerinizi Fx15 yorumlar sayfasından diğer kullanıcılarımız ile paylaşabilirsiniz. Fx15 kesinlikle bir ilaç değildir. Bu ürünün ilk kez kullanmaya karar verdiyseniz Fx15 kullanımı sayfamızdan, ürünün kullanımı hakkında detaylı bilgi edinebilirsiniz. Zayıflamada en son buluş olan FX15 sizi en hızlı şekilde zayıflatıyor. İnsan ömrünü düşündügümüzde yaklaşık olarak Türkiye de 65 yıl. Bu zaman diliminde her günün ne kadar önemli oldugunu anlayabilirsiniz, fx15 ile zaman kaybı yaşamadan en kısa sürede zayıflıyabilirsiniz. İnternet üzerinde uzun süreli araştırmalarımdan sonra fx15 hakkında insanların neler düşündügünü bulmaya çalıştım. Kullananlar üründen aldıkları verim hakkında çok güzel şeyler yazmışlar bazı yazılar ise neredeyse benimde ürünü kullanmama neden olacaktı. Fakat ben zayıf oldugumdan dolayı kullanamadım. Şimdi zayıflama kararı aldıgınızı varsayıyorum ve zayıflama sihirbazımız fx15 ‘i nereden temin edeceginizi sizlere burada yazacam. fx15 Zayıflama özelliğinin yanında içeriğinde bulunan diğer bitkiler, üzüm çekirdeği ekstresi, hücre zarlarını güçlendirir ve hücreleri oksidatif hasardan korur. Antioksidan alımı sadece hastalıklardan korunmamıza sağlamakla kalmaz, birde erken yaşlanmayı önler, gençleştiricidir ve enerji vericidir. Lotus yaprağı ekstresinin toksinlerden arındırıcı ve lipid düzeyini düşürücü etkisi vardır. Fazla kiloları gidererek sindirim sistemini düzenler. Yapılan araştırmalar ayrıca lotus yapraklarının damarları genişletip tansiyonu düşürdüğünü ispatlamıştır. Yeşil çay antienflamatuar ve hücre yenileyicidir.
* Dolaşımı düzenler.
* Kolestrolü düşürmeye yardımcıdır.
Yeşil çayın cildi sıkılaştırıcı özelliği ile de zayıflama sürecindeki cilt sarkmalarını da önler. FX15 tok tutucu özelliği ile size doğal diyet yaptırır. Özel bi program uygulamanıza gerek yok ama tatlı – hamur işi gibi şeylere dikkat edersek daha iyi olur. Cildi sıkılaştırıcı özelliği ile gözler görülür incelme sağlar. Düzenli kullanıma devam ederek ideal kilonuza gelebilirsiniz. FX15'in bir ilaç olmadığını tekrar belirtmek isteriz. İçeriğindeki üzüm ekstresi sindirimi düzenlediği için mide rahatsızlığı gibi bir şikayetiniz varsa daha da fayda sağlayacaktır. Yüksek tansiyonu düşürücü özelliği vardır. FX15'i ideal kilonuza gelinceye kadar kullanmanızı öneririz. Minimum 60 günlük kullanım önerilir. Daha vermeniz gereken kilolar varsa devam edersiniz. Yediklerinize dikkat etmeniz çok güzel. Ama yerleşik yağların vücuttan atılması gittikçe zorlaşır. O yüzden yağları parçalayıp vücuttan atması için FX15'e devam etmenizi öneririz.. Sürekli bir diyeti bırakıp başkasına mı başlıyorsunuz? Peki buna rağmen değil bir kilo 100 gram bile veremiyor musunuz? O halde size önerimiz diyet kelimesini kesinlikle unutup küçük ayrıntılara özen göstererek fazlalıklarınızdan kurtulmanız. Bir dirhem et bin ayıp örter anlayışının tarihte kaldığını hepimiz biliyoruz. Ama dirhem dirhem vererek mutluluk veren bir bedene sahip olmak çok zor değil. Kilo vermek için 50 farklı değişiklikle formda vücuda bir adım daha yaklaşabilir, sağlıklı ve zayıf olmanın tadına varabilirsiniz. fx15 sayesinde fazla kilo ve yağlarınızdan kurtulabilirsiniz ve gönül rahatlığı ile hemen kullanmaya başlayabilirsiniz.
Left by fx15 zayiflama on Jul 09, 2013 11:41 PM

Your comment:
 (will show your gravatar)


Copyright © Igor Milovanovic | Powered by: GeeksWithBlogs.net | Join free