如果没有主机名,SmtpClient如何运行?

时间:2014-10-07 22:35:33

标签: c# asp.net smtp

我有一个在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>

2 个答案:

答案 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>