rt

解决方案 »

  1.   

    void    email2dns(const char *szEmailAddr, unsigned char *szDnsName)

           unsigned int i = 0;
           while (i < strlen(szEmailAddr))
           { 
                   if ('@' == szEmailAddr)
                   { 
                           strcpy(szDnsName, szEmailAddr + i + 1);
                           return;
                    }
                   
                   else
                   { 
                           i++;
                    }
            }
           return;
    }论坛上有很多人问如何查找MX服务器,我写了一个很简单的例子:
    先看看如何在命令行下发邮件:
    C:\Documents and Settings\EA>nslookup -type=mx
    Default Server:  dns.sn.cninfo.net
    Address:  61.134.1.4
    > 163.com
    Server:  dns.sn.cninfo.net
    Address:  61.134.1.4
    Non-authoritative answer:
    163.com MX preference = 50, mail exchanger = m208.163.com
    163.com MX preference = 50, mail exchanger = m209.163.com
    163.com MX preference = 50, mail exchanger = m210.163.com
    163.com MX preference = 50, mail exchanger = m211.163.com
    163.com MX preference = 50, mail exchanger = m215.163.com
    163.com MX preference = 50, mail exchanger = m223.163.com
    163.com MX preference = 50, mail exchanger = m224.163.com
    163.com MX preference = 50, mail exchanger = m228.163.com
    163.com MX preference = 50, mail exchanger = m133.163.com
    163.com MX preference = 50, mail exchanger = m180.163.com
    163.com MX preference = 50, mail exchanger = m203.163.com
    163.com MX preference = 50, mail exchanger = m207.163.com
    163.com nameserver = ns2.nease.net
    163.com nameserver = ns.nease.net
    m133.163.com    internet address = 202.108.44.133
    m180.163.com    internet address = 202.108.44.180
    m203.163.com    internet address = 202.108.44.203
    m207.163.com    internet address = 202.108.44.207
    m208.163.com    internet address = 202.108.44.208
    m209.163.com    internet address = 202.108.44.209
    m210.163.com    internet address = 202.108.44.210
    m211.163.com    internet address = 202.108.44.211
    m215.163.com    internet address = 202.108.44.215
    m223.163.com    internet address = 202.108.44.223
    m224.163.com    internet address = 202.108.44.224
    > exit
    C:\Documents and Settings\EA>telnet m207.163.com 25
    220 Coremail SMTP(Anti Spam) System (163com[20030606])
    HELO EA
    250 192.168.1.207
    MAIL FROM: <[email protected]>
    250 Ok
    RCPT TO: <[email protected]>
    250 Ok
    DATA
    354 End data with <CR><LF>.<CR><LF>
    mx test
    .
    250 Ok: queued as HsAXK4GLqEBBAKSh.1
    221 Bye
    然后下面是用DnsQuery函数查找MX服务器:
    #include <windns.h>
    char            szMxName[50][255];
    DNS_RECORD      *ppQueryResultsSet = NULL,
                   *pQueryRec = NULL;
    int             i = 0;
    char            szDominAddr[30];
    DNS_STATUS      statusDNS;
    statusDNS = DnsQuery_A(szDominAddr, DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &ppQueryResultsSet, 
    NULL);
    if(ERROR_SUCCESS == statusDNS)

           for (pQueryRec = ppQueryResultsSet; pQueryRec; pQueryRec = pQueryRec->pNext)
           { 
                   if (pQueryRec->wType != DNS_TYPE_MX)
                   { 
                           continue;
                    }
                   memset(szMxName, '\0', 255 * sizeof(char));
                   lstrcpyn(szMxName, pQueryRec->Data.MX.pNameExchange, 255);
                   i++;
            }
    }
    这些只是比较重要的代码
    如果要发邮件的话,connect查找到的MX服务器25端口,然后用SMTP协议发邮件即可。
      

  2.   

    我需要的是根据墓地主机ip得到域名,或者根据墓地主机的域名得到ip,要源代码,或者可以使用的控件,分不够再加!最好是源代码