I just learned about this neat trick that’s helpful for developing email features locally.
In your web.config file you can tell your application to save emails to a folder instead of sending through an smtp server. This way you can have your application code work as normal and check all the emails it sends by just looking in a folder. The folder has to exist first. For instance, I created a local folder called c:TempEmail and then changed my local web.config to this:
<!-- <system.net> <mailSettings> <smtp from="email@example.com"> <network host="smtp.address.com" password="" userName="" defaultCredentials="true" /> </smtp> </mailSettings> </system.net> --> <!-- use a pickup directory for debugging --> <system.net> <mailSettings> <smtp from="firstname.lastname@example.org" deliveryMethod="SpecifiedPickupDirectory"> <specifiedPickupDirectory pickupDirectoryLocation="C:TempEmail"/> </smtp> </mailSettings> </system.net>
All email sent through your application will end up as a file in the c:TempEmail folder instead of actually being sent out. And I didn’t have to change my code at all!
MailDefinition md = new MailDefinition(); ... MailMessage msg = md.CreateMailMessage(user.Email, replacements, bodyHtml, newSystem.Web.UI.Control()); //send it! SmtpClient smtp = new SmtpClient(); smtp.Send(msg);
You can open the eml file in Outlook and it’ll look just like it’ll look in the real world – except that you didn’t bother your user with a test email. Sweet!