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