Want to troubleshoot your email created on Windows using the SMTP Service? Turn the Service off

I was working with a co-worker the other day trying to see what our emails looked like when they were sent from a webpage.  We had some formatting issues and wanted to see the actual message on the server right after it was generated.  The problem, we couldn't capture it fast enough on the server.

I realized one small trick, turn just the SMTP service off that comes with IIS. Messages queue up in the local pickup folder.   After you turn the service on, the messages are delivered as normal.    This works both for troubleshooting webpages generated with classic asp, asp.net or a 3rd party script.  Here is an example of what I did.

An update.  I double checked this and ran into some workarounds in regards to .NET testing.

A few assumptions

1) This will fail if you have your SMTP Serivce not configured to accept email locally.   You'll get a 'refused message'.
2) The code needs to run on the same server
3) For .NET 1.1 and 2.0 websites, you are using the System.Web.Mail (1.1 namespace) code sample.  I could not get a webpage with System.Net.Mail namespace to work. 

Stop the service.

Generate a message

Look in the pickup folder

Poof! The message is still there.  Your webpage will still work.  I get a lot of questions in the newsgroups asking where are my messages or what do my messages look like.  You can review the email headers in Notepad while it remains in the pickup folder.  If you have several messages in the folder, just use the Search feature to look inside files for your message.

Here are the headers from the sample email.

X-Receiver: steve@example.com
X-Sender: steve@example.com
Thread-Topic: Sending email with CDO
thread-index: Acd4LFre6hIxY5VuRXC44UTFQUbrpQ==
From: <steve@example.com>
To: <steve@example.com>
Subject: Sending email with CDO
Date: Fri, 6 Apr 2007 05:17:10 -0400
Message-ID: <000001c7782c$5af81390$3e00a8c0@aspdot.net>
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
X-Mailer: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028

This is a message.

Here is the ASP code used to generate the message.

<%
Set myMail=Server.CreateObject("CDO.Message")
myMail.Subject="Sending email with CDO"
myMail.From=steve@example.com
myMail.To=steve@example.com
myMail.TextBody="This is a message."
myMail.Send
set myMail=nothing

response.write "Email was sent at " & Now()
%>

Hope that helps in your SMTP troubleshooting.

11 thoughts on “Want to troubleshoot your email created on Windows using the SMTP Service? Turn the Service off”

  1. Interesting, that doesn’t seem to work for me at all.

    I get an error from both ASP.NET and PHP when I try to send email to an SMTP server that is stopped. When it tries to send the mail, it gets a “Server refused connection” and doesn’t know where to send the mail.

    Maybe I’m doing something differently though.

    Like

  2. It also depends on how the mail object is configured in the ASP code.

    If you’re using a drop folder, the ASP page will simply write the email into that folder where it will sit until the service restarts.

    If it is configured to connect to the SMTP port, it will not work…it will get an error.

    Like

  3. I have been using this trick on my 1.1 web app for a while. Works great for the test server where you do not want your e-mails going out but still have them somewhere to look at. But this no longer works with 2.0 as you mention. I have been hunting for the solution but this blog entry was the only one I could find that even acknowledges the problem let alone offer a solution. Do you have any thoughts on this inconsistency between 1.1 and 2.0? Any pointers?

    Like

  4. I figured out the solution to this problem. Apparently it’s not the limitation of 2.0 but it’s the additional flexibility that is the problem. The new SmtpClient class now provides a property called DeliveryMethod and it has the following choices: Network, PickupDirectoryFromIis and SpecifiedPickupDirectory. By default it’s the “Network”, which means it tries to send the e-mail by itself. That obviously fails if the SMTP service is stopped. So if you want to avoid that then choose, yes you guessed it, “PickupDirectoryFromIis”. This can be done in Web.Config or in code-behind.

    Some links of interest:

    http://www.dotnet2themax.com/blogs/mbellinaso/default,date,2006-04-22.aspx

    http://msdn2.microsoft.com/en-us/library/system.net.mail.smtpdeliverymethod(vs.80).aspx

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s