39 lines
1017 B
C++
39 lines
1017 B
C++
#include "StdAfx.h"
|
|
#include "SMTPMailConnect.h"
|
|
|
|
CNEWSMTPMailConnect::CNEWSMTPMailConnect(void)
|
|
{
|
|
}
|
|
|
|
CNEWSMTPMailConnect::~CNEWSMTPMailConnect(void)
|
|
{
|
|
}
|
|
|
|
BOOL CNEWSMTPMailConnect::Connect( LPCTSTR lpszHostDomain, DWORD dwTimeout /*= 10000*/ ) throw()
|
|
{
|
|
CSimpleArray<CString> arrSMTP;
|
|
_GetSMTPList(lpszHostDomain, arrSMTP);
|
|
for(int i=0; i<arrSMTP.GetSize(); i++)
|
|
{
|
|
if(CSMTPConnection::Connect(arrSMTP[i], dwTimeout) == TRUE)
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void CNEWSMTPMailConnect::_GetSMTPList( LPCTSTR lpszHostDomain, CSimpleArray<CString>& arrSMTP )
|
|
{
|
|
PDNS_RECORD pRec = NULL;
|
|
if(DnsQuery(lpszHostDomain, DNS_TYPE_MX, DNS_QUERY_STANDARD,
|
|
NULL, &pRec, NULL) == ERROR_SUCCESS)
|
|
{
|
|
PDNS_RECORD pRecOrig = pRec;
|
|
while(pRec)
|
|
{
|
|
if(pRec->wType == DNS_TYPE_MX)
|
|
arrSMTP.Add(pRec->Data.MX.pNameExchange);
|
|
pRec = pRec->pNext;
|
|
}
|
|
DnsRecordListFree(pRecOrig,DnsFreeRecordList);
|
|
}
|
|
} |