DirectSmtpClient 邮件直接发送 (跳过邮件中转服务器)

本文介绍了如何使用直接SMTP客户端绕过传统的SMTP服务器进行邮件发送的方法,包括查询MX记录以确定邮件接收服务器的位置,并通过C#代码实现直接向目标服务器发送邮件的过程。此外,还讨论了这种方法的优势与潜在风险。

大部分人都知道发送邮件可以用 SmtpClient 连到中转服务器上来发送邮件。
哪我们能知道邮件到底有没有发送成功呢。 也许有人会建议说搞一个 POP3 来收邮件, ok这是思路之一。
但是有一个问题是你在用这个邮件发送的时候你常常直接提示别人说邮件已经发送成功,这似乎不是很好。

我们来看一下传统寄邮件的流程, 我们信放到邮箱, 然后邮局的人会把信送到某个人哪边,
简单的抽象后邮局就是相当于中转服务器, ok。 哪我直接把哪封信投到对方家里的邮箱是不是也是ok的了?

电子邮件同样可以这样做。哪我什么知道对方家在哪里,这个实际上就记录在 MX记录里 MX Mail Exchanger 邮件交换记录 主要有两个值  MX preference(优先级越小的优先级越大) , mail exchanger 地址了(可以是A记录 Cname,ip)



通过Windows自带的的一个小程序 NsLooup 我们就可以查询到这些了

ok得到哪个地址后你就可以直接发送了.. 如果还想玩命令行你就可以 Telnet 163mx00.mxmail.netease.com 
(一些系统如Vista Telnet好象默认没开,要自己去开)
然后按照邮件发送的协议一行一行敲下去了。

ok现在我们来看一下如何使用c#来完成这些工作
里面核心部分同样还是协议 Socket通信,
我们去://www.codeproject.com/ 搜一下就可以找到好多现成的DNS查询组件可以使用了
(曾经也有人喜欢用C#调用Nslookup)
我这边用的是 DNSQuery


ContractedBlock.gif ExpandedBlockStart.gif Code
Request request = new Request();
request.AddQuestion(
new Question(domain, DnsType.MX, DnsClass.IN));
// send it to the DNS server and get the response
Response response = Resolver.Lookup(request, dnsServer);
// check we have a response
if (response == null)
{
return null;
}
else
{
List
<MXRecord> mxRecordList = new List<MXRecord>();
foreach (var item in response.Answers)
{
MXRecord mxrecord 
= (MXRecord)item.Record;
mxRecordList.Add(mxrecord);
}
mxRecordList.Sort(CompareByPerformance);
List
<IPAddress> iplist = new List<IPAddress>();
foreach(var item in mxRecordList)
{
IPHostEntry entry 
= System.Net.Dns.GetHostEntry(item.DomainName);
foreach (var item2 in entry.AddressList)
{
iplist.Add(item2);
}
}
MxRecordCache[domain] 
= iplist;
return iplist;


///发送方法1 mail用我们的老朋友就可以了
 SmtpClient client = new SmtpClient(mx 得到的smtp地址, 25);
 client.Send(message);
///来发送  
///这边的错误报告需要Try Catch 并且会丢失掉一些错误信息, 信息被隐藏了

///发送方法2 使用Direct smtpClinet的 demo 
using DirectSMTPClient; 
  MailMessage  mailMsg 
=  
/*创建你自己的mail message, 这边一次只能发一个人, (多个人的还没有处理在livemail的服务器cc的地址同样也是livemail自动发送成功, ) */

            mailMsg.Subject 
= "ssssss";

            mailMsg.Body 
= "<html>test</html>";
            mailMsg.IsBodyHtml 
= true;
            SendReport report
= new SendReport();
            
bool result =DirectSMTPClient.DirectSmtpClient.Send(mailMsg, ref report);//发送 report 哪边我们可以得到错误报告

同样通过这个,或者自己架的smtp服务器,我们可以干很多的坏事。
DirectSMTPClient.rar

(发邮件的过程类似于传统的邮件过程,你将信放到信箱(中转服务器) 邮递员将信 放到收件人的信箱 ,收信人去拿信。)
(反垃圾邮件是由接收者设制的。有很多规则,每个产商都可能不一样。 )
(用这个发送假冒邮件,后果自已承担。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值