我有一个在Windows Server 2003上运行的ASP.NET应用程序,作为其功能的一部分,它会向用户发送电子邮件以响应用户注册,密码重置等。它在局域网内运行(事实上在州政府防火墙内)。这是一些典型的代码:
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.IsBodyHtml = true;
message.From = new MailAddress(FromEmail);
message.To.Add(ToEmail);
message.Subject = Subject;
message.Body = FormattedMessageText;
SmtpClient client = new SmtpClient();
client.Send(message);
请注意,它在不指定主机名的情况下调用SmtpClient构造函数!发送工作正常。我试图了解如果没有指定的主机名,这可能是如何工作的(同一个Web服务器上的其他应用程序使用特定的主机名)。这个不使用一个,但仍然有效!除了一个特定的函数,它在所有情况下都不起作用,但在一个特定的情况下,它总是返回“无法连接到远程服务器”,这在过去我因为未能指定主机名而经历过。 / p>
奇怪的是web.config中有一个mailSettings节点。它显然是在开发应用程序时创建的默认值:
<system.net>
<mailSettings>
<smtp>
<network host="127.0.0.1" port="25" userName="" password="" />
</smtp>
</mailSettings>
</system.net>
答案 0 :(得分:1)
如果未在web.config中指定@WPalombini应答,则如果计算机安装了 Microsoft SMTP服务(或者是Exchange Server),则会将消息写入文件因此排队等待Microsoft SMTP服务(或Exchange Server)传递。如果Microsoft SMTP服务配置为指向网络中的有效SMTP服务器,则将传递您的邮件。否则他们只会在机器上的邮件文件夹中排队(默认情况下通常是c:\ inetpub \ mailroot \ queue \)。
答案 1 :(得分:0)
您可以在配置部分下查看您的web.config文件。 例如:
<mailSettings>
<smtp_1 from="user@domain.com" deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\temp" />
</smtp_1>
</mailSettings>
此外,转换部分:
<mailSettings xdt:Transform="Replace">
<smtp_1 from="user@domain.com">
<network enableSsl="true" host="smtp.domain.com" port="587" userName="user@domain.com" password="mypassword" />
</smtp_1>
</mailSettings>
<system.net>
<mailSettings xdt:Transform="Replace">
<smtp from="user@domain.com">
<network enableSsl="true" host="smtp.domain.com" port="587" userName="user@domain.com" password="mypassword" />
</smtp>
</mailSettings>
</system.net>