Files
2022-10-26 12:25:11 +08:00

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);
}
}