亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smtp.cpp

?? EMail VC++程序開發
?? 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

CSMTP::response_code CSMTP::response_table[] =
{
	{ 250, _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" ) }
};


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSMTP::CSMTP( LPCTSTR szSMTPServerName, UINT nPort )
{
	ASSERT( szSMTPServerName != NULL );
	AfxSocketInit();
	m_sSMTPServerHostName = szSMTPServerName;
	m_nPort = nPort;
	m_bConnected = FALSE;
	m_sError = _T( "OK" );
	response_buf = NULL;
}

CSMTP::~CSMTP()
{
	Disconnect();
}

CString CSMTP::GetServerHostName()
{
	return m_sSMTPServerHostName;
}

// 定義存放主機名的緩沖區大小
#define HOSTNAMELENGTH 88
BOOL CSMTP::Connect()
{
	CString sHello;
	TCHAR local_host[HOSTNAMELENGTH];

	// 如果已經建立了連接則返回
	if( m_bConnected )
		return TRUE;

	response_buf = new TCHAR[RESPONSE_BUFFER_SIZE];
	
	if(response_buf == NULL)
	{
		m_sError = _T("內存不夠用了");
		return FALSE;
	}

	if(!m_wsSMTPServer.Create())
	{
		// 建立套接字失敗
		m_sError = _T("無法創建套接字!");
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}

	if(!m_wsSMTPServer.Connect(GetServerHostName(),GetPort()))
	{
		m_sError = _T("無法與服務器建立連接!");
		m_wsSMTPServer.Close();
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}

	if(!get_response(CONNECT_SUCCESS))
	{
		// 接收應答信息失敗
		m_sError = _T("服務器沒有回答");
		m_wsSMTPServer.Close();
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}
	gethostname(local_host,HOSTNAMELENGTH);

	// 以HELO命令開始發信 
	sHello.Format(_T("HELO %s\r\n"),local_host);
	m_wsSMTPServer.Send((LPCTSTR)sHello,sHello.GetLength());

	if(!get_response(GENERIC_SUCCESS))
	{
		// 獲得應答信息失敗
		m_wsSMTPServer.Close();
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}
	m_bConnected = TRUE;
	return TRUE;
}

BOOL CSMTP::Disconnect()
{
	BOOL bRet;
	if(!m_bConnected)
		return TRUE;

	// 發送QUIT命令斷開連接
	CString strQuit = _T( "QUIT\r\n" );
	m_wsSMTPServer.Send((LPCTSTR)strQuit, strQuit.GetLength());

	bRet = get_response(QUIT_SUCCESS);

	// 關閉套接字
	m_wsSMTPServer.Close();

	// 釋放資源,并將連接標志置為FALSE
	if( response_buf != NULL )
	{
		delete[] response_buf;
		response_buf = NULL;
	}
	m_bConnected = FALSE;

	return bRet;
}

UINT CSMTP::GetPort()
{
	return m_nPort;
}

CString CSMTP::GetLastError()
{
	return m_sError;
}

BOOL CSMTP::SendMessage(CMailMessage * msg)
{
	if (msg == NULL)
	{
		// msg為空是沒有意義的
		return FALSE;
	}

	// 如果還沒有建立連接
	if(!m_bConnected)
	{
		m_sError = _T("喲,忘了先連服務器了");
		return FALSE;
	}

	if(!FormatMailMessage(msg))
	{
		// 如果調整消息體的格式不成功
		return FALSE;
	}

	if(!transmit_message(msg))
	{
		// 如果消息體發送不成功
		return FALSE;
	}

	return TRUE;
}

BOOL CSMTP::FormatMailMessage( CMailMessage* msg )
{
	if (msg == NULL)
	{
		// msg為空是沒有意義的
		return FALSE;
	}

	if(!msg->GetNumRecipients())
	{
		m_sError = _T("No Recipients");
		return FALSE;
	}

	// 在CMailMessage中封裝了“格式化”消息的功能
	msg->FormatMessage();
	return TRUE;
}

void CSMTP::SetServerProperties( LPCTSTR szSMTPServerName, UINT nPort)
{
	if( szSMTPServerName == NULL )
		return;
	m_sSMTPServerHostName = szSMTPServerName;
	m_nPort = nPort;
}


CString CSMTP::cook_body(CMailMessage * msg)
{
	ASSERT(msg);

	CString strTemp = msg->m_sBody;
	CString strCook = _T("");
	CString strBad = _T("\r\n.\r\n");
	CString strGood = _T("\r\n..\r\n");
	int nPos,nStart = 0,nBadLength = strBad.GetLength();

	if (strTemp.Left(3) == _T(".\r\n"))
		strTemp = _T(".") + strTemp;
	while ((nPos = strTemp.Find(strBad)) > -1)
	{
		strCook = strTemp.Mid(nStart,nPos);
		strCook += strGood;
		strTemp = strCook + strTemp.Right(strTemp.GetLength() - (nPos + nBadLength));
	}
	return strTemp;
}

BOOL CSMTP::transmit_message(CMailMessage * msg)
{
	CString strFrom,strTo,strTemp,strEmail;
	if (msg == NULL)
		return FALSE;
	if(!m_bConnected)
	{
		// 若還未建立連接
		m_sError = _T("請先建立連接!");
		return FALSE;
	}

	// 發送MAIL命令
	strFrom.Format(_T( "MAIL From: <%s>\r\n" ),(LPCTSTR)msg->m_sFrom);
	m_wsSMTPServer.Send((LPCTSTR)strFrom,strFrom.GetLength());
	if(!get_response(GENERIC_SUCCESS))
		return FALSE;
	
	// 發送RCPT命令
	for(int i = 0;i < msg->GetNumRecipients();i++)
	{
		msg->GetRecipient(strEmail,strTemp,i);
		strTo.Format(_T("RCPT TO: <%s>\r\n"),(LPCTSTR)strEmail);
		m_wsSMTPServer.Send((LPCTSTR)strTo,strTo.GetLength());
		get_response(GENERIC_SUCCESS);
	}

	// 處理抄送
	for(i = 0;i < msg->GetNumRecipients(CMailMessage::CC);i++)
	{
	   msg->GetRecipient(strEmail,strTemp,i,CMailMessage::CC);
	   strTo.Format(_T("RCPT TO: <%s>\r\n"),(LPCTSTR)strEmail);
	   m_wsSMTPServer.Send((LPCTSTR)strTo,strTo.GetLength());
	   get_response(GENERIC_SUCCESS);
	}

	// 處理暗送
    for(i = 0;i < msg->GetNumRecipients(CMailMessage::BCC);i++)
	{
	   msg->GetRecipient(strEmail,strTemp,i,CMailMessage::BCC);
	   strTo.Format(_T( "RCPT TO: <%s>\r\n"),(LPCTSTR)strEmail);
	   m_wsSMTPServer.Send((LPCTSTR)strTo,strTo.GetLength());
	   get_response(GENERIC_SUCCESS);
	}

	// 發送DATA命令
	strTemp = _T("DATA\r\n");
	m_wsSMTPServer.Send((LPCTSTR)strTemp,strTemp.GetLength());
	if(!get_response(DATA_SUCCESS))
	{
		// 發送DATA命令失敗
		return FALSE;
	}

	// 發送郵件頭
	m_wsSMTPServer.Send((LPCTSTR)msg->m_sHeader,msg->m_sHeader.GetLength());

	// 發送郵件正文
	strTemp = cook_body(msg);
	m_wsSMTPServer.Send((LPCTSTR)strTemp,strTemp.GetLength());

	// 給郵件正文加上結束標志
	strTemp = _T("\r\n.\r\n");
	m_wsSMTPServer.Send((LPCTSTR)strTemp,strTemp.GetLength());
	if(!get_response(GENERIC_SUCCESS) )
	{
		return FALSE;
	}
	return TRUE;
}

BOOL CSMTP::get_response(UINT response_expected)
{
	ASSERT( response_expected >= GENERIC_SUCCESS );
	ASSERT( response_expected < LAST_RESPONSE );

	CString sResponse;
	UINT response;
	response_code* pResp;

	if( m_wsSMTPServer.Receive( response_buf, RESPONSE_BUFFER_SIZE ) == SOCKET_ERROR )
	{
		m_sError = _T("套接字錯誤");
		return FALSE;
	}
	sResponse = response_buf;
	sscanf((LPCTSTR)sResponse.Left(3),_T("%d"),&response );
	pResp = &response_table[response_expected];
	if(response != pResp->nResponse)
	{
		m_sError.Format(_T("%d : %s"),response,(LPCTSTR)pResp->sMessage );
		return FALSE;
	}
	return TRUE;
}

void CSMTP::Cancel()
{
   // 取消阻塞的連接
   m_wsSMTPServer.CancelBlockingCall();

   // 關閉套接字
   m_wsSMTPServer.Close();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕欧美一区| 欧美一级夜夜爽| 国产精品无人区| 国产91精品一区二区麻豆网站| 欧美r级电影在线观看| 韩国女主播一区二区三区| 久久久久久夜精品精品免费| 国产成人午夜精品5599| 中文字幕在线一区| 欧美性猛片aaaaaaa做受| 青青草伊人久久| 久久久久久夜精品精品免费| 99re成人精品视频| 亚洲成人av一区二区三区| 欧美mv日韩mv国产网站app| www.久久久久久久久| 亚洲国产综合人成综合网站| 日韩一区二区精品| 国产不卡免费视频| 亚洲国产精品嫩草影院| 日韩精品一区二区三区在线观看 | 国产精品成人一区二区艾草| 色综合久久久久网| 美腿丝袜一区二区三区| 中文字幕第一区二区| 欧美男男青年gay1069videost| 久久黄色级2电影| 亚洲视频 欧洲视频| 91精品在线麻豆| 暴力调教一区二区三区| 日日摸夜夜添夜夜添精品视频 | 在线观看91视频| 国内精品久久久久影院薰衣草| 亚洲女人****多毛耸耸8| 欧美一级电影网站| 波多野结衣的一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 亚洲欧洲精品一区二区三区不卡| 欧美一级艳片视频免费观看| 色综合天天综合网国产成人综合天| 日本中文字幕一区二区视频| 亚洲欧洲精品一区二区精品久久久 | 午夜国产精品一区| 国产女人18毛片水真多成人如厕 | 亚洲精品第1页| 久久久久久久国产精品影院| 欧美日韩国产小视频在线观看| 风间由美性色一区二区三区| 免费在线观看成人| 亚洲一区日韩精品中文字幕| 国产精品私房写真福利视频| 精品少妇一区二区三区免费观看 | 国产老妇另类xxxxx| 午夜精品一区在线观看| 亚洲日本丝袜连裤袜办公室| 国产日韩精品一区二区三区| 日韩亚洲欧美中文三级| 欧美日韩www| 欧美午夜一区二区三区| 91色porny在线视频| 成人一区在线观看| 国产成人精品综合在线观看| 日本不卡1234视频| 天堂在线一区二区| 午夜不卡在线视频| 香蕉乱码成人久久天堂爱免费| 亚洲乱码日产精品bd| 亚洲天堂免费在线观看视频| 国产精品五月天| 国产精品日日摸夜夜摸av| 久久精品亚洲乱码伦伦中文| 久久精品亚洲乱码伦伦中文| 国产香蕉久久精品综合网| 国产午夜精品一区二区三区视频| 精品福利一区二区三区免费视频| 日韩视频免费观看高清在线视频| 91精品国产综合久久久久| 欧美日韩精品欧美日韩精品| 欧美人狂配大交3d怪物一区| 在线播放91灌醉迷j高跟美女| 欧美日韩在线一区二区| 欧美日韩国产成人在线91| 欧美乱妇23p| 日韩精品在线网站| 国产日韩欧美在线一区| 国产欧美中文在线| 亚洲欧美激情视频在线观看一区二区三区| 亚洲欧洲精品成人久久奇米网| 亚洲人成在线观看一区二区| 亚洲激情五月婷婷| 日韩和欧美一区二区三区| 久久精品国产77777蜜臀| 国产酒店精品激情| 91性感美女视频| 51精品秘密在线观看| 精品卡一卡二卡三卡四在线| 久久精品欧美一区二区三区不卡| 中日韩av电影| 亚洲妇女屁股眼交7| 捆绑调教一区二区三区| 国产激情视频一区二区三区欧美| aaa亚洲精品| 91精品国产欧美一区二区| 久久久亚洲高清| 一区二区在线电影| 日本不卡的三区四区五区| 国产成人8x视频一区二区| 91片在线免费观看| 欧美一区二区视频观看视频| 久久九九久久九九| 亚洲午夜电影在线观看| 久久99日本精品| 91精品91久久久中77777| 日韩欧美中文字幕一区| 国产精品久久久久久亚洲伦| 亚洲mv大片欧洲mv大片精品| 国产一区二区三区不卡在线观看 | 欧美三级电影网| 26uuu成人网一区二区三区| 亚洲欧洲另类国产综合| 视频一区免费在线观看| 成人禁用看黄a在线| 4438x成人网最大色成网站| 久久精品亚洲乱码伦伦中文| 婷婷国产在线综合| 大陆成人av片| 日韩欧美亚洲另类制服综合在线| 亚洲欧洲av在线| 精品一区免费av| 精品污污网站免费看| 欧美激情一区二区三区全黄| 日韩高清一级片| 色老汉一区二区三区| 亚洲精品一区二区三区影院| 亚洲一区二区三区视频在线| 国产乱码精品一区二区三区av| 欧美蜜桃一区二区三区| 最新热久久免费视频| 激情深爱一区二区| 91麻豆精品91久久久久久清纯| 亚洲三级小视频| 成人毛片在线观看| 精品国产伦一区二区三区观看方式| 亚洲大片免费看| 94色蜜桃网一区二区三区| 久久久久久9999| 久久激情五月婷婷| 日韩午夜中文字幕| 香港成人在线视频| 欧洲国产伦久久久久久久| 成人免费一区二区三区视频| 粉嫩av一区二区三区粉嫩| 精品欧美一区二区三区精品久久| 午夜不卡在线视频| 欧美美女视频在线观看| 亚洲国产婷婷综合在线精品| 色婷婷久久综合| 一区二区三区美女| 91高清在线观看| 亚洲精品精品亚洲| 色综合久久久久综合99| 亚洲精品成人悠悠色影视| 一本大道久久a久久精品综合| 中文字幕一区二区三区四区不卡| 成人永久aaa| 亚洲人亚洲人成电影网站色| 成人av片在线观看| 亚洲欧美一区二区在线观看| 成人av影视在线观看| 国产精品免费aⅴ片在线观看| 成人动漫视频在线| 国产精品久久久久国产精品日日| 成人av在线资源| 亚洲另类色综合网站| 欧美午夜影院一区| 日韩精品成人一区二区三区| 日韩情涩欧美日韩视频| 国内欧美视频一区二区| 中文字幕不卡三区| 91蜜桃网址入口| 性欧美疯狂xxxxbbbb| 日韩欧美国产1| 国产精品自拍在线| 亚洲色图色小说| 欧美精品vⅰdeose4hd| 精品一区二区免费| 国产精品美女www爽爽爽| 色综合久久中文综合久久牛| 亚洲国产成人av| www久久精品| 91蜜桃免费观看视频| 日韩国产在线一| 国产视频一区在线播放| 97久久精品人人爽人人爽蜜臀 | 五月天欧美精品| 日韩欧美中文字幕制服| 粉嫩绯色av一区二区在线观看| 一区二区三区中文字幕在线观看| 欧美美女一区二区在线观看| 国产在线麻豆精品观看|