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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smtp.cpp

?? 根據(jù)SMTP郵件傳輸協(xié)議,編寫的簡(jiǎn)單的發(fā)送郵件的測(cè)試程序!
?? CPP
字號(hào):
#include "Smtp.h"
#include "MailMessage.h"
#include <assert.h>



Smtp::response_code Smtp::response_table[] =
{
	{ 250, "SMTP server error" },						// GENERIC_SUCCESS
	{ 220, "SMTP server not available" },				// CONNECT_SUCCESS
	{ 354, "SMTP server not ready for data" },			// DATA_SUCCESS
	{ 334, "SMTP server username failure"},				// USERNAME_SUCCESS
	{ 235, "SMTP server Login failure"},				// LOGIN_SUCCESS
	{ 221, "SMTP server didn't terminate session" }  	// QUIT_SUCCESS
};



Smtp::Smtp(string szSMTPServerName, uint nPort /* = SMTP_PORT */)
:m_bConnected(false)
,m_sSMTPServerHostName(szSMTPServerName)
,m_nPort(nPort)
{



}


Smtp::~Smtp()
{

	
}

void Smtp::SetServerProperties( string sServerHostName, uint nPort /* = SMTP_PORT  */)
{

	assert( !sServerHostName.empty());
	// Needs to be safe in non-debug too
	if( sServerHostName.empty())
		return;
	m_sSMTPServerHostName = sServerHostName;
	m_nPort = nPort;

}


string Smtp::GetLastError()
{

	return m_szError;

}



string Smtp::GetMailerName()
{

		return m_sMailerName;


}

uint Smtp::GetPort()
{

	return m_nPort;


}
	

bool Smtp::Disconnect()
{
	bool ret;
	if( !m_bConnected )
		return true;
	
	string sQuit =  "QUIT\r\n" ;
	m_wsSMTPServer.Send( (char*) sQuit.c_str(), sQuit.length() );
	
	
	ret = get_response( QUIT_SUCCESS );
	m_wsSMTPServer.Close();
	
	m_bConnected = FALSE;
	return ret;
	
	
}


bool Smtp::Connect()
{


	string sHello;
	char local_host[ 80 ];	
	if( m_bConnected )
		return true;

	if(  !m_wsSMTPServer.Initialize(PROTOCOL_TCP) )
	{
		m_szError = "Unable to create the socket.";
		return false;
	}
	if( !m_wsSMTPServer.Connect( (char*) GetServerHostName().c_str(), GetPort() ) )
	{
		m_szError =  "Unable to connect to server" ;
		m_wsSMTPServer.Close();
		return FALSE;
	}
	if( !get_response( CONNECT_SUCCESS ) )
	{
		m_szError =  "Server didn't respond." ;
		m_wsSMTPServer.Close();
		return FALSE;
	}

	gethostname( local_host, 80 );
	sHello =  "HELO ";
	sHello += local_host;
	sHello += "\r\n";

	m_wsSMTPServer.Send( (char*)sHello.c_str(), sHello.length() );
	if( !get_response( GENERIC_SUCCESS ) )
	{
		m_wsSMTPServer.Close();
		return FALSE;
	}
	m_bConnected = TRUE;
	return TRUE;

}


bool Smtp::FormatMailMessage( MailMessage* msg )
{


	assert( msg != NULL );
	if( !prepare_header( msg ) )
	{
		return false;
	}
	
	if( strncmp(msg->m_sBody.c_str() + msg->m_sBody.length() - 2, "\r\n",2) != 0 )
		msg->m_sBody += "\r\n";
	
	return true;

}


bool Smtp::SendMessage( MailMessage* msg )
{

	assert( msg != NULL );
	if( !m_bConnected )
	{
		m_szError =  "Must be connected" ;
		return false;
	}
	if( !FormatMailMessage( msg )  )
	{
		return false;
	}
	if( !transmit_message( msg ) )
	{
		return false;
	}
	return true;
}


string Smtp::GetServerHostName()
{



	return m_sSMTPServerHostName;

}


bool Smtp::get_response( uint response_expected )
{
	
	
	
	assert( response_expected >= GENERIC_SUCCESS );
	assert( response_expected < LAST_RESPONSE );
	
	string sResponse;
	uint response;
	response_code* pResp;	// Shorthand
	
	if( m_wsSMTPServer.Recv( response_buf, RESPONSE_BUFFER_SIZE ) == SOCKET_ERROR )
	{
		m_szError = "Socket Error" ;
		return false;
	}
	sResponse = response_buf;
	char szResult[8] = {0};
	strncpy(szResult,sResponse.c_str(),3);
	sscanf( szResult, "%d", &response );
	pResp = &response_table[ response_expected ];
	if( response != pResp->nResponse )
	{
		char szError[32] = {0};
		sprintf(szError,"%d:%s", response, pResp->sMessage);
		m_szError = szError;
		return false;
	}
	return true;
	
}
	
bool Smtp::transmit_message( MailMessage* msg )
{


	string sFrom;
	string sTo;
	string sTemp;
	string sEmail;

	assert( msg != NULL );
	if( !m_bConnected )
	{
		m_szError =  "Must be connected" ;
		return false;
	}


	string szMailAddress,szTemp;
	msg->GetFrom(szMailAddress,szTemp);
	sFrom  =  "MAIL From: <";
	sFrom += szMailAddress;
	sFrom += ">\r\n";
	m_wsSMTPServer.Send( (char*)sFrom.c_str(), sFrom.length());
	
	if( !get_response( GENERIC_SUCCESS ) && !Authentication() )
		return false;
	

	for( int i = 0; i < msg->GetNumRecipients(); i++ )
	{
		msg->GetRecipient( sEmail, sTemp, i );
		sTo  =  "RCPT TO: <";
		sTo +=	sEmail;
		sTo += ">\r\n";
		m_wsSMTPServer.Send( (char*)sTo.c_str(), sTo.length() );
		get_response( GENERIC_SUCCESS );
	}


	sTemp = "DATA\r\n";
	m_wsSMTPServer.Send( (char*)sTemp.c_str(), sTemp.length() );
	if( !get_response( DATA_SUCCESS ) )
	{
		return false;
	}

	m_wsSMTPServer.Send( (char*)msg->m_sHeader.c_str(), msg->m_sHeader.length() );


	sTemp = prepare_body( msg );
	m_wsSMTPServer.Send( (char*)sTemp.c_str(), sTemp.length() );


	sTemp = "\r\n.\r\n";
	m_wsSMTPServer.Send( (char*)sTemp.c_str(), sTemp.length() );
	if( !get_response( GENERIC_SUCCESS ) )
	{
		return false;
	}
	return true;
}


string Smtp::prepare_body( MailMessage* msg )
{

	assert( msg != NULL );
	string sTemp;
	string sCooked = "";
	const char* szBad = "\r\n.\r\n";
	const char* szGood = "\r\n..\r\n";

	sTemp = msg->m_sBody;
	if( strncmp(sTemp.c_str(),".\r\n",3) == 0)
		sTemp = "." + sTemp;

	char* p = NULL;

	char *pBody = new char[msg->m_sBody.length() + 1];
	strcpy(pBody,msg->m_sBody.c_str());
	*(pBody + msg->m_sBody.length()) = '\0';

	char* pPos = pBody;
	while( (p = strstr(pPos, szBad )) != NULL )
	{
		*p = '\0';
		sCooked = p;
		sCooked += szGood;
		sTemp += sCooked;
		pPos = p + strlen(szBad);
	}

	delete []pBody;
	pBody = NULL;
	
	return sTemp;
}


bool Smtp::prepare_header( MailMessage* msg)
{

	assert( msg != NULL );
	string sFrom;
	string sTo;
	char szDate[64] = {0};
	string& sHeader = msg->m_sHeader;	// Shorthand

	if( msg->GetNumRecipients() <= 0 )
	{
		m_szError = "No Recipients";
		return false;
	}

	sHeader = "";	// Clear it

	// Get the recipients into a single string
	sTo = "";
	string sEmail = "";
	string sFriendly = "";
	for( int i = 0; i < msg->GetNumRecipients(); i++ )
	{
		msg->GetRecipient( sEmail, sFriendly, i );
		sTo += ( i > 0 ? "," : "" );
		sTo += sFriendly;
		sTo += "<";
		sTo += sEmail;
		sTo += ">";
	}
	msg->m_tDateTime = time(NULL);
	// Format: Mon, 01 Jun 98 01:10:30 GMT

	string szMail,szUser,szFrom;
	msg->GetFrom(szMail,szUser);
	
	if(!szUser.empty())
	{
		szFrom  = szUser;
		szFrom += "<" ;
		szFrom += szMail;
		szFrom += ">";
	}
	else
	{
		szFrom = szMail;
	}
	char * pszFormat = "%a, %d %b %y %H:%M:%S %Z";
	strftime(szDate,64,pszFormat,localtime(&msg->m_tDateTime));

	sHeader  = "Date: ";
	sHeader += szDate;
	sHeader += "\r\n";
	sHeader += "From: ";
	sHeader += szFrom;
	sHeader += "\r\n";
	sHeader += "To: ";
	sHeader += sTo;
	sHeader += "\r\n";
	sHeader += "Subject: ";
	sHeader += msg->m_sSubject;
	sHeader += "\r\n";
	sHeader += "X-Mailer: <";
	sHeader += m_sMailerName;
	sHeader += ">\r\n\r\n";
	return true;
}


bool Smtp::Authentication(string user,string password)
{
	
	

	   
	m_wsSMTPServer.Send( (char*)user.c_str(), user.length() );
	if( !get_response(USERNAME_SUCCESS) )
	{
		m_szError  = "USERNAME FAILURE";
		return false;
	}
    
	m_wsSMTPServer.Send( (char*)password.c_str(), password.length() );	
	if( !get_response(LOGIN_SUCCESS) )
	{
		m_szError = "Login failure";
		return false; 
		
	}

	return true;
	
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影院在线免费观看| 国产精品自拍网站| 国产精品久久久久桃色tv| 在线精品视频小说1| 韩国视频一区二区| 亚洲图片欧美色图| 中文字幕国产一区二区| 欧美疯狂做受xxxx富婆| 93久久精品日日躁夜夜躁欧美| 日日夜夜精品视频免费| 1000部国产精品成人观看| 日韩精品一区二区三区视频| 欧美综合亚洲图片综合区| 国产黄色91视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲欧洲日韩一区二区三区| 精品日韩在线观看| 7777女厕盗摄久久久| 在线亚洲欧美专区二区| av在线一区二区三区| 国产一区二区三区免费看| 男女男精品网站| 日韩国产精品久久久| 亚洲一区二区高清| 亚洲美女在线国产| 亚洲欧洲国产日韩| 国产精品久久毛片| 欧美激情一区二区三区在线| 久久精品这里都是精品| 欧美v日韩v国产v| 日韩午夜激情av| 5858s免费视频成人| 欧美日韩和欧美的一区二区| 在线观看成人小视频| 91久久久免费一区二区| 色综合中文字幕| 欧美国产成人在线| 国产亚洲欧美在线| 2020国产成人综合网| 精品国产人成亚洲区| 欧美电视剧在线看免费| 日韩欧美国产综合一区| 日韩欧美国产综合| 久久综合久久99| 国产三级精品视频| 国产精品久久久久毛片软件| 亚洲欧洲精品一区二区三区| 亚洲女爱视频在线| 亚洲永久精品国产| 日韩综合小视频| 免费观看在线色综合| 激情综合色综合久久| 国产一区二区毛片| 国产 欧美在线| 99国产精品视频免费观看| 91网站最新网址| 欧美日韩中字一区| 91精品欧美一区二区三区综合在| 91精品国产综合久久福利软件| 日韩精品一区二区三区视频| 久久精品一二三| 中文字幕亚洲在| 亚洲最新在线观看| 婷婷夜色潮精品综合在线| 久久国产免费看| 国产电影一区二区三区| 99久久伊人精品| 欧美久久一二区| 久久久久99精品一区| 亚洲免费资源在线播放| 欧美探花视频资源| 日韩欧美亚洲一区二区| 国产精品久久久久久久久晋中 | 日韩精品一二区| 日韩和欧美一区二区| 精品一区在线看| 成人免费毛片aaaaa**| 欧美性色aⅴ视频一区日韩精品| 欧美一区二区黄| 国产精品国产三级国产普通话蜜臀 | 国产不卡视频一区二区三区| 91丨九色丨黑人外教| 欧美一区二区网站| 中文字幕不卡的av| 日韩国产欧美一区二区三区| 国产成a人亚洲精品| 欧美日韩电影一区| 欧美高清在线精品一区| 香蕉久久夜色精品国产使用方法 | 色婷婷久久99综合精品jk白丝| 欧美喷水一区二区| 国产精品美女久久久久久| 天天免费综合色| www.亚洲人| 精品国产乱码91久久久久久网站| 中文字幕字幕中文在线中不卡视频| 奇米影视一区二区三区| 91丨九色丨尤物| 久久久精品免费观看| 亚洲成精国产精品女| eeuss影院一区二区三区| 日韩一区二区三| 亚洲图片欧美视频| 99在线精品免费| 久久久久久黄色| 日韩不卡一区二区| 91福利精品第一导航| 国产精品久久看| 国产精品中文字幕欧美| 91精品国产色综合久久不卡蜜臀| 亚洲精品亚洲人成人网| 国产99久久久国产精品潘金| 日韩精品一区二区三区中文精品| 亚洲午夜久久久久| 一本大道久久a久久精二百 | 久久无码av三级| 日韩精品一级中文字幕精品视频免费观看 | 五月婷婷综合在线| 91久久精品网| 亚洲男人的天堂网| av在线不卡网| 国产精品久久影院| 粉嫩绯色av一区二区在线观看| 亚洲精品一区在线观看| 麻豆精品视频在线| 日韩欧美在线综合网| 午夜私人影院久久久久| 欧美日韩一区二区三区在线看| 亚洲精品日日夜夜| 色女孩综合影院| 一区二区三区四区在线| 色域天天综合网| 亚洲欧美另类久久久精品 | 色综合天天综合网天天看片| 国产精品天干天干在线综合| 顶级嫩模精品视频在线看| 国产欧美一区二区精品性色| 国产成人精品免费网站| 国产精品美女久久久久久久久久久 | 亚洲欧美国产77777| 色综合久久九月婷婷色综合| 一区二区三区色| 欧美日韩综合在线免费观看| 丝袜美腿亚洲色图| 91麻豆精品国产自产在线观看一区| 无吗不卡中文字幕| 欧美一级高清片在线观看| 毛片av中文字幕一区二区| 26uuu另类欧美亚洲曰本| 国产精品一级二级三级| 国产精品久久精品日日| 色先锋久久av资源部| 亚洲国产一区二区三区青草影视| 欧美精品第1页| 国产一区二区视频在线播放| 国产免费观看久久| 97精品久久久午夜一区二区三区| 曰韩精品一区二区| 91精品国产麻豆国产自产在线 | 亚洲黄一区二区三区| 欧美写真视频网站| 麻豆精品视频在线观看视频| 欧美国产精品中文字幕| 91在线观看免费视频| 午夜精品久久久久影视| 日韩免费观看高清完整版| 粉嫩av一区二区三区粉嫩| 夜夜夜精品看看| 日韩限制级电影在线观看| 成人午夜电影小说| 亚洲成人免费观看| 久久亚洲影视婷婷| 91国偷自产一区二区开放时间| 五月婷婷久久丁香| 国产欧美日韩在线| 欧美日韩国产影片| 国产成人综合在线播放| 亚洲一卡二卡三卡四卡五卡| 欧美精品一区二区三区四区 | 亚洲国产精品久久久久婷婷884 | 一区二区三区在线高清| 精品国免费一区二区三区| 91在线你懂得| 精品在线免费观看| 亚洲黄色尤物视频| 久久夜色精品一区| 欧美日韩中文字幕精品| 国产精品夜夜嗨| 午夜欧美在线一二页| 欧美国产丝袜视频| 日韩一区和二区| 色香蕉成人二区免费| 国产精品一区二区在线观看网站 | 国产美女一区二区| 亚洲国产婷婷综合在线精品| 久久色.com| 欧美日韩高清不卡| 色一情一乱一乱一91av| 国产一区二区成人久久免费影院| 亚瑟在线精品视频|