views:

54

answers:

1

I deployed my web app to our production IIS 6.0 server and everything is working except when my code attempts to send email to an address that is NOT in the domain of our email server. I've seen various symptoms but this seems the most straightforward to describe:

Syntax error in parameters or arguments. The server response was: 5.7.1 This system is not configured to relay mail

My web app getting this error msg uses System.Net.Mail. It resides along with the older web app it is supposed to replace which uses System.Web.Mail. There is one SMTP server on this same machine that seems to require some new configuration regarding relay.

Checking the SMTP server properties showed nothing configured for "Relay Restrictions". The older production web app sends email without errors with the SMTP server configured as described.

So, in summary, does use of System.Net.Mail require something different for relaying email than System.Web.Mail?

The web.config for the newer version that has relay issues contains:

<system.net><mailSettings><smtp><network host="mail.cbmiweb.com" port="25"/></smtp>

I used the values above for all my testing (first on my localhost with XP IIS 5.1; then on a staging IIS 6.0 server in our LAN) and never had any "relay" problems.

The web.config for the older version using System.Web.Mail contains nothing related to SMTP!

If I suddenly need a username and password added to the smtp setting above, how come I never needed "credentials" during development?

I don't know much about SMTP and really don't even know what to ask the mail server administrator. I am very confused about what to do...thanks.

+1  A: 

Sounds to me like the old app is sending the message directly to the recipients server and is bypassing your local mail server completely. This would have happened because your app would not have had a mail server to use configured, so it defaults back to trying to send the mail itself.

This is usually a bad idea as it can cause delays in your application depending on the recipients mail server configuration (we're talking seconds here). Further if you aren't configured to deal with things like grey lists, etc, then you can have a high number of emails that you think was sent, but never really arrived.

You should ask the mail server administrator to properly configure your local mail server to allow relaying from your machine.

OR (and this is the more secure way)

You should set up a user on your local mail server and have your app use those login credentials when attempting to send email.

The systemnetmail.com site might be helpful. Specifically the page on smtp configuration.

Chris Lively
Thank you. Starting to make more sense now. When you wrote "old app would not have had a mail server to use configured.." - you deduce that because no <smtp> entry in web.config of the old app? That is, apparently it is not based on any of the differences of System.Net.Mail vs. System.Web.Mail? If both of these are true, then perhaps I will try removing my <smtp> configuration stuff from web.config of new app. I recently learned from my email admin that my localhost and staging webserver are on our LAN and all PCs there "can relay". Getting closer to solution. Thanks.
John Galt