无须SMTP服务器中转直接发送电子邮件
2009-01-21 20:00:52 来源:WEB开发网MX指令查询获取远程邮局地址
与DNS服务器通信其实就是一个简单的UDP网络通信,端口号为53,通信的数据格式如下:
所有的DNS消息基本上都是相同的数据结构,但DNS RR是采用了其他的数据结构。
QNAME是一个表示域长度的变量,表示每一节有多少字节,例如:www.sockets.com将表示为:
最后的“Additional”通常包含了查询服务器期望被发送的纪录以减少通信量,例如,回应MX查询时通常在“Additional”中包含‘A’纪录。
具体的MX查询过程请参加源代码,以下代码实现了获取本机所有DNS,然后逐一尝试MX查询的方法:
//
// 尝试所有的DNS来查询邮局服务器地址
//
BOOL GetMX (
char *pszQuery, // 要查询的域名
OUT t_Ary_MXHostInfos &Ary_MXHostInfos // 输出 Mail Exchange 主机名
)
{
CNetAdapterInfo m_NetAdapterInfo;
m_NetAdapterInfo.Refresh ();
int nNetAdapterCount = m_NetAdapterInfo.GetNetCardCount();
for ( int i=0; i<nNetAdapterCount; i++ )
{
COneNetAdapterInfo *pOneNetAdapterInfo = m_NetAdapterInfo.Get_OneNetAdapterInfo ( i );
if ( pOneNetAdapterInfo )
{
int nDNSCount = pOneNetAdapterInfo->Get_DNSCount ();
for ( int j=0; j<nDNSCount; j++ )
{
CString csDNS = pOneNetAdapterInfo->Get_DNSAddr ( j );
if ( GetMX ( pszQuery, csDNS.GetBuffer(0), Ary_MXHostInfos ) )
return TRUE;
}
}
}
return FALSE;
}
如果查询“gmail.com”的邮局服务器地址,将得到如下的结果:
更多精彩
赞助商链接