mon*_*nty 0 c# email smtp .net-core .net-core-2.0
每次我用谷歌搜索或在这里搜索“如何发送电子邮件”时,我都会得到如下结果:使用 smtp 客户端,连接到 smtp 服务器,通过 smtp 服务器发送邮件。
我正在寻找服务器如何将电子邮件发送到其他服务器的代码(或想法)。所以上面链接中的方法对我来说不起作用。
有什么提示 smtp 服务器库会做什么吗?
首先,您需要找出每个电子邮件收件人的 SMTP 服务器地址。您可以通过查询收件人域的 DNS 中的 MX 记录来完成此操作。在 .NET 中,您可以使用库来做到这一点ARSoft.Tools.Net:
var resolver = new DnsStubResolver();
var records = resolver.Resolve<MxRecord>("gmail.com", RecordType.Mx);
foreach (var record in records.OrderByDescending(c => c.Preference)) {
Console.WriteLine(record.ExchangeDomainName + " : " + record.Preference);
}
Run Code Online (Sandbox Code Playgroud)
每个 MX 记录都有偏好值,您应该按偏好顺序尝试它们(首先是最高的,如果不可用,则选择下一个,依此类推)。
现在,当您知道目标 SMTP 服务器的地址时 - 您可以连接到它(通常在端口 25 上,或者如果您想使用加密连接 - 在端口 465 上)并执行常规 SMTP 对话(smtp 是文本协议),例如:
HELO < you start conversation
250 OK < server lets you proceed
MAIL FROM: <someuser@somedomain.com>
250 OK < server is fine with this sender
RCPT TO: <someuser@targetdomain.com>
250 OK < server is fine with recipient
DATA < you are going to send email body
250 OK < server is fine with that - proceed
Here you send your message
250 OK < server accepted message
QUIT
Run Code Online (Sandbox Code Playgroud)
有一些库能够在 .NET 中执行所有这些操作(MX 发现、SMTP 对话等),例如 MailBee(非免费)。我只使用了提到的库,所以不知道是否有免费的库。
现在,虽然看起来很容易,但实际上它不会像我描述的那么顺利。
目标 SMTP 服务器将对您的 IP 地址、发件人域和邮件内容执行一系列检查。例如,当您执行以下操作时:
MAIL FROM: <someuser@somedomain.com>
Run Code Online (Sandbox Code Playgroud)
大多数不错的 SMTP 服务器都会执行反向 DNS 检查,以确保发件人的域与您发送电子邮件的 IP 相关。要通过该检查,您当然应该拥有目标域 ( somedomain.com) 并在那里放置特定的 DNS 记录。
大多数 SMTP 服务器会在第一次发送时将您列入“灰名单”。这意味着他们会拒绝您的电子邮件,但鼓励您稍后再试。因此,您无法在不存储电子邮件的情况下发送电子邮件,因为在很多情况下 - 需要多次尝试才能成功发送电子邮件。
SMTP 服务器执行更多检查(例如不同类型的签名),因此需要付出一些努力才能使这项工作可靠。
由于上述原因 - 大多数人不会实现自己的 SMTP 服务器,而是将所有上述工作中继到现有的 SMTP 服务器。
总而言之 - 可以执行直接发送到目标 SMTP 服务器的操作,但通过 Web API 简单地执行此操作不会可靠地工作。您需要为此目的设置一个服务,正确配置它(不是微不足道的)并将消息存储在某个地方(在数据库中),因为可能需要多次重试。
| 归档时间: |
|
| 查看次数: |
5799 次 |
| 最近记录: |