www.pudn.com > FindMails.rar > Smtp.cpp


   // SMTP.cpp: implementation of the CSMTP class. 
// 
////////////////////////////////////////////////////////////////////// 
#include "stdafx.h" 
#include "SMTP.h" 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
CString snamefrom; 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
CSMTP::response_code CSMTP::response_table[]= 
{ 
	{502,_T("SMTP server error")}, 
	{220,_T("SMTP server not available")}, 
	{354,_T("SMTP server not ready for data")}, 
	{221,_T("SMTP server didn't terminate session")} 
}; 
 
CSMTP::CSMTP() 
{ 
	AfxSocketInit(); 
	m_bConnected=FALSE; 
	m_sError=_T("OK"); 
	response_buf=NULL; 
} 
 
CSMTP::~CSMTP() 
{ 
	Disconnect(); 
 
} 
 
BOOL CSMTP::get_response(UINT response_expected) 
{ 
 
	ASSERT(response_expected>=GENERIC_SUCCESS); 
	ASSERT(response_expected\r\n",mfrom); 
	m_wsSMTPServer.Send((LPCTSTR)sFrom,sFrom.GetLength());	 
	if(!get_response(GENERIC_SUCCESS)) 
		return FALSE; 
/* 
	sTo.Format(_T("SEND TO:<%s>\r\n"),(LPCTSTR)mto); 
	m_wsSMTPServer.Send((LPCTSTR)sEmail,sEmail.GetLength()); 
	if(!get_response(GENERIC_SUCCESS)) 
		return FALSE; 
*/ 
 
	sEmail.Format(_T("RCPT TO:<%s>\r\n"),(LPCTSTR)mto); 
	m_wsSMTPServer.Send((LPCTSTR)sEmail,sEmail.GetLength()); 
	if(!get_response(GENERIC_SUCCESS)) 
		return FALSE; 
 
 
	sTemp.Format(_T("DATA\r\n")); 
	m_wsSMTPServer.Send((LPCTSTR)sTemp,sTemp.GetLength()); 
	if(!get_response(DATA_SUCCESS)) 
	{ 
		return FALSE; 
	} 
 
	//send the body start 
 
	 
 
	sFrom.Format("From:\r\n"); 
	m_wsSMTPServer.Send((LPCTSTR)sFrom,sFrom.GetLength()); 
	 
	sFrom.Format("From:%s\r\n",(LPCTSTR)mfrom); 
	m_wsSMTPServer.Send((LPCTSTR)sFrom,sFrom.GetLength()); 
 
	sTo.Format(_T("To:%s\r\n"),(LPCTSTR)mto); 
	m_wsSMTPServer.Send((LPCTSTR)sTo,sTo.GetLength()); 
 
	version.Format(_T("MIME-Version:1.0\r\n")); 
	m_wsSMTPServer.Send((LPCTSTR)version,version.GetLength()); 
 
	sbody.Format(_T("Content-Type:text/html;charset=\"gb2312\"\r\n")); 
	m_wsSMTPServer.Send((LPCTSTR)sbody,sbody.GetLength()); 
 
	subject.Format(_T("Subject:%s\r\n"),(LPCTSTR)msubject); 
	m_wsSMTPServer.Send((LPCTSTR)subject,subject.GetLength()); 
	 
	subject="X-Priority: 3\r\n"; 
	m_wsSMTPServer.Send((LPCTSTR)subject,subject.GetLength()); 
 
    subject="X-Mailer: FoxMail 3.11 Release [cn]\r\n"; 
	m_wsSMTPServer.Send((LPCTSTR)subject,subject.GetLength()); 
 
	sbody.Format(_T("\r\n%s"),mbody); 
	m_wsSMTPServer.Send((LPCTSTR)sbody,sbody.GetLength()); 
 
	//send the body end 
 
	//send the append file 
/* 
	CString sendfile; 
	CFile afile; 
	ULONG fileleg; 
	char buffer[1]; 
	CString buf_file,buf_f; 
	for(int i=0;i<=files;i++) 
	{ 
		sendfile="\r\n\r\n--------------------------------------"; 
     	m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		sendfile="\r\n\--------------------------------------\r\n\r\n"; 
     	m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		sendfile.Format(_T("Content-Type: application/octet-stream; name=\"%s\"\r\n"),(LPCTSTR)mfile[i]); 
		m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		sendfile.Format(_T("Content-Transfer-Encoding: base64\r\n")); 
		m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		sendfile.Format(_T("Content-Disposition: attachment; filename=\"%s\"\r\n"),(LPCTSTR)mfile[i]); 
		m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		sendfile.Format(_T("\r\n\r\n")); 
		m_wsSMTPServer.Send((LPCTSTR)sendfile,sendfile.GetLength()); 
 
		if(!afile.Open(mfile[i],CFile::modeReadWrite|CFile::typeBinary|CFile::shareDenyNone))AfxMessageBox("Can't open file"); 
		fileleg=afile.GetLength(); 
		while(1) 
		{ 
 
		try 
		{ 
			afile.Read(buffer,1); 
			m_wsSMTPServer.Send((LPCTSTR)buffer,1); 
			buf_file=""; 
		} 
		catch(CFileException *e) 
		{ 
			e->Delete(); 
		} 
		if(afile.GetPosition()>fileleg)break; 
		} 
		afile.Close(); 
	} 
 
*/ 
   
 
	Sleep(1000); 
 
	sTemp.Format(_T("\r\n\r\n.\r\n")); 
	m_wsSMTPServer.Send((LPCTSTR)sTemp,sTemp.GetLength()); 
	if(!get_response(GENERIC_SUCCESS)) 
	{ 
		return FALSE; 
	} 
	 
	return TRUE; 
}