在C#中发送电子邮件

时间:2010-12-02 10:28:11

标签: c# email

是否可以在C#控制台发送电子邮件,没有需要和SMTP服务器?

编辑: 为什么我需要另一台SMTP服务器?我不能将我的localhost机器用作服务器..?

编辑:
我只需要发送一封来自我的域名的电子邮件,例如abc@mydomain.com
这可能吗?在我的C#程序中我需要做什么...我不关心接收电子邮件,我只关心发送它们....

由于

6 个答案:

答案 0 :(得分:1)

正如@TomTom指出的那样,整个邮件基础设施依赖于SMTP。您可以做的是跳过输出(中继)SMTP服务器并将消息直接发送到接收SMTP服务器。

为此,您需要创建某种排队机制(无法保证接收SMTP服务器可以在您尝试连接时为您提供服务)并且您可以查找它。

MX记录是存储在DNS服务器中的条目,用于查找SMTP服务器。您可以在此处找到包含MX查找示例的文章:http://www.codeproject.com/KB/IP/dnslookupdotnet.aspx

但是,我 DO 建议您安装本地SMTP服务器并让它处理上述问题。

答案 1 :(得分:1)

如果没有本地SMTP服务器,则不必依赖本地SMTP服务器。但是,您无论如何都必须连接到SMTP服务器。这就是原因。

您必须完成以下步骤:

  • 确定给定域的邮件交换服务器是什么。
  • 连接到该邮件交换服务器并发送邮件。

这些步骤通常由您的本地SMTP服务器完成。本地SMTP服务器的另一个优点是它将处理其队列并在失败时继续尝试发送您的电子邮件。

如何确定给定域的MX记录。

我建议你看一下这个answer。基本上,您必须在DNS服务器上进行查询,以获取要向其发送电子邮件地址的域名的MX记录列表。

如何连接到邮件交换服务器

那么答案会令你失望。与您连接到本地SMTP服务器完全一样。使用TcpClient,您可以连接到上一步在端口 25 上获得的邮件交换服务器之一,并使用SMTP protocol启动交付流程。

这里的诀窍是你必须处理多个MX服务器。它们通常以偏好列出。如果第一个无法访问,则尝试下一个,依此类推......

这也是您的SMTP服务器可以为您处理的事情。

如果你真的想自己构建这个逻辑,那么请看看我参与的这个开源项目的SmtpClient类的 DirectSend 方法。

答案 2 :(得分:0)

是的,基本上找出发送电子邮件并发送的位置。即域的DNS MX查找以找出SMTP服务器。

每封电子邮件都需要接收方的SMTP服务器。

答案 3 :(得分:0)

如果您不想安装自己的服务器,可以使用 gmail yahoo SMTP服务器。

在发送邮件之前,您首先需要进行身份验证,否则无法发送邮件。

答案 4 :(得分:0)

您需要访问某种电子邮件服务器才能发送电子邮件,而您的电子邮件很可能会通过一个或多个SMTP服务器传递给收件人。但是,您连接的电子邮件服务器可能允许您在不使用SMTP的情况下发送电子邮件。例如,Exchange可能允许您使用MAPICDO发送电子邮件。虽然我认为{。{1}}没有得到.Net的正式支持,简单的CDO在Windows中已被弃用,不应该使用。您可以使用此处所述的MAPIIntroducing the Exchange Web Services Managed API 1.0

如果您有另一个电子邮件服务器而不是Microsoft Exchange,那么该服务器可能会使用某种API。

答案 5 :(得分:0)

我经常做的事情是创建Gmail帐户并通过该帐户发送。

您只需要将SmtpClient连接到端口587上的主机smtp.gmail.com,并将用户名,密码和enableSSL属性设置为true。