WEB开发网
开发学院软件开发VC 无须SMTP服务器中转直接发送电子邮件 阅读

无须SMTP服务器中转直接发送电子邮件

 2009-01-21 20:00:52 来源:WEB开发网   
核心提示: MX指令查询获取远程邮局地址与DNS服务器通信其实就是一个简单的UDP网络通信,端口号为53,无须SMTP服务器中转直接发送电子邮件(4),通信的数据格式如下:所有的DNS消息基本上都是相同的数据结构,但DNS RR是采用了其他的数据结构,具体的MX查询过程请参加源代码,以下代码实现了获取

MX指令查询获取远程邮局地址

与DNS服务器通信其实就是一个简单的UDP网络通信,端口号为53,通信的数据格式如下:

无须SMTP服务器中转直接发送电子邮件

所有的DNS消息基本上都是相同的数据结构,但DNS RR是采用了其他的数据结构。

QNAME是一个表示域长度的变量,表示每一节有多少字节,例如:www.sockets.com将表示为:

无须SMTP服务器中转直接发送电子邮件

最后的“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”的邮局服务器地址,将得到如下的结果:

上一页  1 2 3 4 5 6  下一页

Tags:无须 SMTP 服务器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接