【问题标题】:Send mail using localhost SMTP使用 localhost SMTP 发送邮件
【发布时间】:2010-12-06 04:35:52
【问题描述】:

我正在尝试在 IIS 上设置 SMTP 服务器以发送邮件。 SMTP 服务器旨在供 C# 中的 ASP.NET 代码使用。

我以前使用 gmail smtp,其中我提供了 smtp.gmail.com 作为主机,带有安全端口和我的 gmail uid/pwd。那工作得很好。这是用于执行此操作的代码。

SmtpClient smtpClient = new SmtpClient();
smtpClient.UseDefaultCredentials = false;
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.Credentials = new NetworkCredential(uname,pwd);
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);

现在我计划在 IIS 上使用 localhost SMTP 服务器,我应该为参数 UseDefaultCredentials 和 Credentials 提供什么值。我将分配 false 给 EnableSsl,因为它通过端口 25。

另外,最简单的 SMTP 虚拟服务器配置可能是什么。

【问题讨论】:

    标签: c# iis-6 smtp


    【解决方案1】:

    当您使用本地 IIS SMTP 服务时,请将 DeliveryMethod 设置为 PickupDirectoryFromIis。例如:

      smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
    

    这完全绕过了网络层,将消息直接写入磁盘。它比通过健谈的 SMTP 协议快得多。

    当您使用上述代码时,意味着您可以摆脱这部分代码:

    smtpClient.UseDefaultCredentials = false;
    smtpClient.Host = "smtp.gmail.com";
    smtpClient.Port = 587;
    smtpClient.Credentials = new NetworkCredential(uname,pwd);
    smtpClient.EnableSsl = true;
    

    【讨论】:

    • 这是使用本地 IIS 拾取目录的正确答案。由于它只是写入一个文件,它根本不会使用任何凭据,IIS 只会为您发送它。
    【解决方案2】:

    我认为你可以在 localhost 中使用:

    SmtpClient smtpClient = new SmtpClient();
    smtpClient.UseDefaultCredentials = true;
    smtpClient.Send(mailMessage);
    

    【讨论】:

    • 您是否启动了 IIS SMTP 服务?
    • 是的,但它仍然不起作用(我有win8,但据我了解,我激活了一切正确)。我应该像“" 这样的东西写到网络配置吗?如果我只写这 3 行,它仍然是“未知的 smtp 主机”
    • IIS 不再有 SMTP,它已被删除。
    【解决方案3】:

    这取决于您如何配置 smtp 服务器。您可能根本不需要使用任何凭据,只需将服务器配置为仅接受本地连接。

    【讨论】:

    • @Joel:我的 SMTP 服务器设置:身份验证:匿名访问 IP 地址:全部未分配 出站安全:匿名访问 好奇,如果这是发送没有凭据的邮件的正确配置。
    • 这是serverfault的问题。
    【解决方案4】:

    您是否尝试过启用中继?

    找到 IIS6 管理器(我发现搜索 IIS 可能会返回 2 个结果)转到 SMTP 服务器属性,然后“访问”,然后按中继按钮。

    然后您可以选择全部或只允许某些 ip,例如 127.0.0.1

    【讨论】:

    • 我正在使用 CDOSYS,并且从安装此虚拟服务器的服务器发送电子邮件顺利,但是当我从工作站尝试我的实用程序时,收到“传输失败连接到服务器”消息。任何想法?我需要在我的代码中更改什么,以便工作站也能够使用这个虚拟 SMTP 服务器并可以发送电子邮件。
    【解决方案5】:

    Tx Natim,你说的对我有用。现在让我们的 Intranet 应用程序使用集成的身份验证与我们的 Exchange 2007 服务器:

    Dim msg As New MailMessage()
    Dim smtp As SmtpClient
    
    msg.From = New MailAddress(strFrom)
    msg.To.Add(strTo)
    msg.Subject = strSubject
    msg.Body = strBody
    
    smtp = New SmtpClient("ServerName")
    smtp.UseDefaultCredentials = True
    smtp.Send(msg) 
    

    【讨论】:

      【解决方案6】:

      如果你想在本地测试邮件,只需下载安装剪纸工具https://papercut.codeplex.com/

      并将主机名更改为 localhost,如下所示。 Papercut 捕获使用 localhost 发送的所有电子邮件。

        smtpClient.UseDefaultCredentials = false;
          smtpClient.Host = "localhost";
          smtpClient.Port = 587;
          smtpClient.Credentials = new NetworkCredential(uname,pwd);
          smtpClient.EnableSsl = true;
      

      【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2016-01-13
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多