使用 localhost SMTP 发送邮件
Posted
技术标签:
【中文标题】使用 localhost SMTP 发送邮件【英文标题】:Send mail using 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 虚拟服务器配置可能是什么。
【问题讨论】:
【参考方案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,但据我了解,我激活了一切正确)。我应该像“这取决于您如何配置 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;
【讨论】:
另外 smtp4dev 是开发者的本地 smtp 服务器。 还有TestMailServerTool:原始(下载好像坏了):toolheap.com/test-mail-server-tool备份:github.com/Serjster/TestMailServerTool 我已经拥有主机和凭据,但对我来说(使用 Sendgrid),修复是添加 EnableSsl 和 587 端口。以上是关于使用 localhost SMTP 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章
当我在localhost中使用gmail smtp发送电子邮件时,返回长消息