【问题标题】:How do I properly setup IIS5's SMTP service to send email from my development environment?如何正确设置 IIS5 的 SMTP 服务以从我的开发环境发送电子邮件?
【发布时间】:2009-01-16 18:52:22
【问题描述】:

我正在尝试使用 SmtpClient 类从 ASP.NET Web 应用程序发送电子邮件。到目前为止,我已授予对 127.0.0.1 的中继访问权限。我正在尝试将测试电子邮件发送到我的 gmail 帐户。 EML 文件卡在 mailroot 的队列文件夹中。我的 WinXP 防火墙已禁用。我在代码中没有发现任何异常,但电子邮件永远不会发送到目标地址。我还尝试了其他电子邮件帐户。

        SmtpClient client = new SmtpClient();
        client.Host = "127.0.0.1";

        MailMessage message = new MailMessage();
        message.To.Add("myemail@gmail.com");
        message.From = "name@domain.com";
        message.Subject = subject;
        message.IsBodyHtml = false;
        message.Body = body;

        client.Send(message);

这是来自 IIS SMTP 日志的 sn-p。

Software: Microsoft Internet Information Services 5.1
Version: 1.0
Date: 2009-01-16 18:28:28
Fields: time c-ip cs-method cs-uri-stem sc-status 
18:28:28 127.0.0.1 EHLO - 250
18:28:28 127.0.0.1 MAIL - 250
18:28:28 127.0.0.1 RCPT - 250
18:28:28 127.0.0.1 DATA - 250
18:29:45 127.0.0.1 MAIL - 250
18:29:45 127.0.0.1 RCPT - 250
18:29:45 127.0.0.1 DATA - 250
18:30:37 127.0.0.1 QUIT - 0

【问题讨论】:

    标签: asp.net smtp iis-5


    【解决方案1】:

    根据您的网络设置方式,您可能需要告诉 IIS 将电子邮件传递到您的 Exchange 服务器以传递到外部世界。为此:
    1. 右键单击​​ IIS MMC 管理单元中的默认 SMTP 虚拟服务器节点并打开“属性”对话框。
    2. 转到“交付”选项卡,然后单击选项卡底部的“高级”按钮。
    3. 在智能主机框中,输入您的 Exchange 服务器的名称。 (或相同的 DNS 条目,例如 smtp.mydomain.com)

    【讨论】:

      【解决方案2】:

      我一直在与同样的问题作斗争,我想我知道为什么 - 以及解决方案。

      问题及其测试方法
      首先,我检查了我是否可以通过端口 25 连接。例如,通过在命令提示符下打开 telnet 并键入即可轻松完成(小圆圈是它自己的字母 O,而不是符号 :));

       o auth.smtp.1and1.co.uk 25
      

      如果它连接(而不是给你一个错误),那么它不是端口 25 的防火墙问题。如果它确实给你一个错误,那么首先检查你的防火墙设置直到它工作。 p>

      接下来我启用了 SMTP 服务的登录功能并勾选了所有扩展属性。然后,这在日志文件中给了我两个 URL。就我而言,他们是
      http://www.spamhaus.org/query/bl?ip=217.44.248.144
      http://www.sorbs.net/lookup.shtml?217.44.248.144

      按照这些链接,基本上可以清楚地看到有人(我猜是接收服务器)正在检查并看到我正在从动态 IP 地址发送(我只是在家里通过 ADSL 执行此操作),因此将其阻止为垃圾邮件。

      解决方案
      您需要将 SMTP 服务器配置为通过 ISP 的 SMTP 服务器进行中继。
      1. 转到 SMTP 服务的属性,然后转到传递 -> 高级
      2. 将您的 ISP 的 SMTP 服务器的名称放在“智能主机”字段中(例如 auth.smtp.1and1.co.uk)
      3. 保存
      4. 返回交付选项卡,单击出站安全选项卡
      5. 单击“基本身份验证”并指定用于访问电子邮件的用户名和密码。

      注意;我在上面假设您必须对您的 ISP SMTP 服务器进行身份验证,并且他们对 POP3/IMAP 和 SMTP 使用相同的 uid/pwd,因为这是最常见的。您的情况可能会有所不同 - 请检查您的电子邮件程序中的电子邮件设置。

      【讨论】:

        【解决方案3】:

        我仍在测试这个 Jim,我注意到的一件事是您没有正确设置您的发件人地址。 From 接受 MailAddress 类而不是字符串。

        变化:

        message.From = "name@domain.com";
        

        收件人:

        message.From = new MailAddress("name@domain.com");
        

        在默认 SMTP 设置下:

        “IP 地址:”下拉菜单是否设置为 127.0.0.1 或(全部未分配)?如果可能,将其设置为所有未分配。 尝试添加绑定到您的机器的 ip 地址,以便能够通过 SMTP 服务进行中继。尽管您向主机 127.0.0.1 发送电子邮件,但它可能是从您的本地网络分配的 IP 发送的。为确保一切正常,您可能需要将中继限制中的单选按钮选择为“除以下列表之外的所有”并清除该列表。这将打开继电器以测试您的配置。一旦你弄清楚你的问题是什么,你应该限制它。

        您的 SMTP 日志中是否列出了任何错误代码?

        【讨论】:

        • 感谢您的回复。我已经尝试了您的建议,但是将 IP 地址从“所有未分配”更改为我的机器 IP 导致异常。无法从传输连接读取数据:net_io_connectionclosed。
        • 对不起,我想我在我的文章中混淆了一些东西。我建议将下拉菜单设置为所有未分配。我建议您将允许通过 smtp 服务中继的机器设置为所有(用于测试)或至少您的机器 ip 和 localhost。
        【解决方案4】:

        如果代码没有返回异常,那么就不可能有任何异常。 如果您查看原始 .EML 文件,请检查那里并寻找任何不合适的地方。

        然而,最有可能的问题是给 IIS 一个“iisreset”。这样做,您可能会看到消息开始发送。 SMTP 服务器上的配置更改在重新启动之前并不总是起作用。

        【讨论】:

          【解决方案5】:

          检查您的事件查看器,然后您将看到类似这样的内容

          到远程域“yahoo.com”的邮件传递失败,原因如下:发生 SMTP 协议错误。

          有关详细信息,请参阅帮助和支持中心http://go.microsoft.com/fwlink/events.asp

          (这是我的)。我认为雅虎必须有某种协议?还是我们设置了错误的协议?还在想.. 请给我发电子邮件 jokenjp@yahoo.com(主题很好,所以我不认为是垃圾邮件)

          【讨论】:

            猜你喜欢
            • 2016-12-05
            • 2014-04-04
            • 2019-12-01
            • 1970-01-01
            • 2016-09-02
            • 1970-01-01
            • 2016-05-22
            • 2022-08-20
            • 1970-01-01
            相关资源
            最近更新 更多