Testing send mail logic using “<specifiedPickupDirectory>” element
Quite often it happens that we have logic of sending mails through .Net applications which we are unable to test correctly during development due to following reasons.
- We don’t want to actually send mails to the concerned person
- We dont have smtp server running on our development / testing machines
In such cases we usually have two options , either comment out the logic or install some third party fake smtp server / emulator.
While going through MSDN I stumbled upon a very nice inbuilt feature which can be of great help in above scenarios.
Usually our mail sending logic looks more or less like below code
Class File:
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient();
mail.From = new MailAddress("<FromEmailAddress>@gmail.com");
mail.To.Add("<ToEmailAddress>@yahoo.co.in");
mail.Subject = "Demo Subject";
mail.Body = "Testing send mail through Gmail";
SmtpServer.Send(mail);
Config:
<system.net>
<mailSettings>
<smtp from="<FromEmailAddress>@gmail.com">
<network host="smtp.gmail.com" port="587" userName="<UserName>" password="<Password>" enableSsl="true" />
</smtp>
</mailSettings>
</system.net>
Now by using “specifiedPickupDirectory” element in config you can choose a directory on the local machine where all the emails will be created (but will not be sent).Change the above config snippet as shown below and you are done.
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory" from="<FromEmailAddress>@Gmail.com">
<specifiedPickupDirectory pickupDirectoryLocation="c:\email"/>
</smtp>
</mailSettings>
</system.net>
On executing the code with above configuration you will see the email message file generated in the pickup directory which can be opened by outlook or a free eml file reader (in some cases you should even be able to open it through Notepad).