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

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

?? smtp.cpp

?? 非常好用的VC++源代碼
?? CPP
字號:
// SMTP.cpp: implementation of the CSMTP class.
// Copyright (c) 1998, Wes Clyburn
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SMTP.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

// Static member initializers
//

// Note: the order of the entries is important.
//       They must be synchronized with eResponse entries. 
CSMTP::response_code CSMTP::response_table[] =
{
	// GENERIC_SUCCESS
	{ 250, _T( "SMTP server error" ) },

	// CONNECT_SUCCESS
	{ 220, _T( "SMTP server not available" ) },

	// DATA_SUCCESS
	{ 354, _T( "SMTP server not ready for data" ) },

	// QUIT_SUCCESS
	{ 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;
}

BOOL CSMTP::Connect()
{
	CString sHello;
	TCHAR local_host[ 80 ];	// Warning: arbitrary size
	if( m_bConnected )
		return TRUE;
	
	try
	{
		// This will be deleted in Disconnect();
		response_buf = new TCHAR[ RESPONSE_BUFFER_SIZE ];

		// I can't count on all class users' applications
		// to have exception-throwing operator-new implementations,
		// so I'll soul-kiss the ones that don't.
		if( response_buf == NULL )
		{
			m_sError = _T( "Not enough memory" );
			return FALSE;
		}
	}
	catch( CException *e )
	{
		response_buf = NULL;
		m_sError = _T( "Not enough memory" );
		delete e;
		return FALSE;
	}

	if( !m_wsSMTPServer.Create() )
	{
		m_sError = _T( "Unable to create the socket." );
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}
	if( !m_wsSMTPServer.Connect( GetServerHostName(), GetPort() ) )
	{
		m_sError = _T( "Unable to connect to server" );
		m_wsSMTPServer.Close();
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}
	if( !get_response( CONNECT_SUCCESS ) )
	{
		m_sError = _T( "Server didn't respond." );
		m_wsSMTPServer.Close();
		delete response_buf;
		response_buf = NULL;
		return FALSE;
	}
	gethostname( local_host, 80 );
	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 ret;
	if( !m_bConnected )
		return TRUE;
	// Disconnect gracefully from the server and close the socket
	CString sQuit = _T( "QUIT\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sQuit, sQuit.GetLength() );

	// No need to check return value here.
	// If it fails, the message is available with GetLastError
	ret = get_response( QUIT_SUCCESS );
	m_wsSMTPServer.Close();

	if( response_buf != NULL )
	{
		delete[] response_buf;
		response_buf = NULL;
	}

	m_bConnected = FALSE;
	return ret;
}

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

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

BOOL CSMTP::SendMessage(CMailMessage * msg)
{
	ASSERT( msg != NULL );
	if( !m_bConnected )
	{
		m_sError = _T( "Must be connected" );
		return FALSE;
	}
	if( FormatMailMessage( msg ) == FALSE )
	{
		return FALSE;
	}
	if( transmit_message( msg ) == FALSE )
	{
		return FALSE;
	}
	return TRUE;
}

BOOL CSMTP::FormatMailMessage( CMailMessage* msg )
{
	ASSERT( msg != NULL );
	if( msg->GetNumRecipients() == 0 )
	{
		m_sError = _T( "No Recipients" );
		return FALSE;
	}
	msg->FormatMessage();
	return TRUE;
}

void CSMTP::SetServerProperties( LPCTSTR szSMTPServerName, UINT nPort)
{
	ASSERT( szSMTPServerName != NULL );
	// Needs to be safe in non-debug too
	if( szSMTPServerName == NULL )
		return;
	m_sSMTPServerHostName = szSMTPServerName;
	m_nPort = nPort;
}


CString CSMTP::cook_body(CMailMessage * msg)
{
	ASSERT( msg != NULL );
	CString sTemp;
	CString sCooked = _T( "" );
	LPTSTR szBad = _T( "\r\n.\r\n" );
	LPTSTR szGood = _T( "\r\n..\r\n" );
	int nPos;
	int nStart = 0;
	int nBadLength = strlen( szBad );
	sTemp = msg->m_sBody;
	if( sTemp.Left( 3 ) == _T( ".\r\n" ) )
		sTemp = _T( "." ) + sTemp;
	//
	// This is a little inefficient because it beings a search
	// at the beginning of the string each time. This was
	// the only thing I could think of that handled ALL variations.
	// In particular, the sequence "\r\n.\r\n.\r\n" is troublesome. 
	// (Even CStringEx's FindReplace wouldn't handle that situation
	// with the global flag set.)
	//
	while( (nPos = sTemp.Find( szBad )) > -1 )
	{
		sCooked = sTemp.Mid( nStart, nPos );
		sCooked += szGood;
		sTemp = sCooked + sTemp.Right( sTemp.GetLength() - (nPos + nBadLength) );
	}
	return sTemp;
}

BOOL CSMTP::transmit_message(CMailMessage * msg)
{
	CString sFrom;
	CString sTo;
	CString sTemp;
	CString sEmail;

	ASSERT( msg != NULL );
	if( !m_bConnected )
	{
		m_sError = _T( "Must be connected" );
		return FALSE;
	}

	// Send the MAIL command
	//
	sFrom.Format( _T( "MAIL From: <%s>\r\n" ), (LPCTSTR)msg->m_sFrom );
	m_wsSMTPServer.Send( (LPCTSTR)sFrom, sFrom.GetLength() );
	if( !get_response( GENERIC_SUCCESS ) )
		return FALSE;
	
	// Send RCPT commands (one for each recipient)
	//
	for( int i = 0; i < msg->GetNumRecipients(); i++ )
	{
		msg->GetRecipient( sEmail, sTemp, i );
		sTo.Format( _T( "RCPT TO: <%s>\r\n" ), (LPCTSTR)sEmail );
		m_wsSMTPServer.Send( (LPCTSTR)sTo, sTo.GetLength() );
		get_response( GENERIC_SUCCESS );
	}

	// Send the DATA command
	sTemp = _T( "DATA\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() );
	if( !get_response( DATA_SUCCESS ) )
	{
		return FALSE;
	}
	// Send the header
	//
	m_wsSMTPServer.Send( (LPCTSTR)msg->m_sHeader, msg->m_sHeader.GetLength() );

	// Send the body
	//
	sTemp = cook_body( msg );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() );

	// Signal end of data
	//
	sTemp = _T( "\r\n.\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.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;	// Shorthand

	if( m_wsSMTPServer.Receive( response_buf, RESPONSE_BUFFER_SIZE ) == SOCKET_ERROR )
	{
		m_sError = _T( "Socket Error" );
		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;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
播五月开心婷婷综合| 九九视频精品免费| 国产精品入口麻豆原神| 日韩精品一区二区三区中文不卡 | 91麻豆国产自产在线观看| 美女视频一区二区| 偷拍一区二区三区四区| 中文字幕亚洲欧美在线不卡| 日韩三级高清在线| 91精品在线观看入口| 555夜色666亚洲国产免| 日韩一级高清毛片| 日韩欧美精品在线| 日韩一区二区三区四区| 精品粉嫩aⅴ一区二区三区四区| 欧美成人vps| 国产午夜精品一区二区三区四区| 久久先锋影音av| 国产精品久久久久久久久动漫| 日韩美女视频一区二区| 国产在线精品国自产拍免费| 久久99精品一区二区三区| 奇米一区二区三区av| 久久国产欧美日韩精品| 国产精品一卡二卡| 97se亚洲国产综合自在线不卡 | 欧美亚洲动漫制服丝袜| 欧美亚洲动漫另类| 欧美一区二区高清| 精品少妇一区二区三区日产乱码 | 亚洲综合精品自拍| 日本亚洲一区二区| 丰满白嫩尤物一区二区| 色天使色偷偷av一区二区 | 午夜精品影院在线观看| 久久黄色级2电影| 99视频精品免费视频| 欧美日韩你懂的| 久久日韩精品一区二区五区| 日韩伦理电影网| 免费一级片91| 91色婷婷久久久久合中文| 欧美日本在线看| 久久久久国产精品厨房| 亚洲综合在线第一页| 久久精品国产精品亚洲精品| www.在线欧美| 日韩一区二区三区精品视频| 久久综合九色综合欧美亚洲| 国产白丝精品91爽爽久久| 色综合久久中文字幕综合网| 欧美一级黄色大片| 中文字幕一区在线观看视频| 午夜精品久久久| 国产自产视频一区二区三区| 色先锋资源久久综合| 亚洲精品一区二区在线观看| 一区二区三区在线视频观看| 激情综合五月婷婷| 欧美最新大片在线看| 国产视频一区不卡| 日本视频一区二区三区| 一本色道亚洲精品aⅴ| 精品国产乱码久久久久久夜甘婷婷| 椎名由奈av一区二区三区| 九九久久精品视频| 欧美天天综合网| 亚洲精品一线二线三线无人区| 亚洲电影你懂得| 欧美性极品少妇| 国产亚洲欧洲一区高清在线观看| 亚洲h精品动漫在线观看| 高清av一区二区| 欧美日韩黄色影视| 亚洲色图19p| 久久精品国产亚洲aⅴ| 91在线视频播放| 精品欧美一区二区久久| 色综合久久综合中文综合网| 国产亚洲综合性久久久影院| 人禽交欧美网站| 在线这里只有精品| 国产精品你懂的在线欣赏| 久久99精品久久久久婷婷| 色av一区二区| 日本一区二区三区在线观看| 日韩高清国产一区在线| 在线观看亚洲一区| 国产精品久久免费看| 成人久久18免费网站麻豆| 精品国产三级电影在线观看| 麻豆91免费观看| 在线综合视频播放| 亚洲乱码中文字幕| 99精品视频在线观看免费| 国产亚洲一区二区在线观看| 久久国产精品色| 日韩免费观看高清完整版在线观看| 亚洲成a人片在线观看中文| 成人黄色av网站在线| 国产日韩欧美激情| 捆绑紧缚一区二区三区视频| 7777精品伊人久久久大香线蕉的| 日韩三级电影网址| 久久精品网站免费观看| 久久97超碰国产精品超碰| 91精品国产色综合久久不卡电影 | 老色鬼精品视频在线观看播放| 欧美性生活一区| 亚洲欧美日韩久久精品| 91热门视频在线观看| 国产精品三级电影| 成人性生交大片免费看视频在线| 日韩视频在线永久播放| 日韩精品免费专区| 欧美日韩国产首页| 91精品在线观看入口| 偷拍自拍另类欧美| 欧美电视剧在线观看完整版| 国内精品伊人久久久久影院对白| 精品久久一区二区三区| 国产在线播放一区三区四| 久久亚洲综合色| 波多野结衣一区二区三区 | 国产欧美一区二区精品久导航| 国产不卡一区视频| 亚洲美女免费视频| 欧美老年两性高潮| 视频一区在线播放| 欧美一区二区三区成人| 男男视频亚洲欧美| 精品国产露脸精彩对白| 久久精品国产99国产| 国产丝袜在线精品| 91黄色激情网站| 亚洲精品国产精品乱码不99| 精品视频全国免费看| 久久精品国产亚洲5555| 国产人伦精品一区二区| 大胆欧美人体老妇| 亚洲欧洲精品天堂一级| 精品视频1区2区3区| 久久国产夜色精品鲁鲁99| 国产精品久久网站| 欧美午夜精品电影| 另类小说一区二区三区| 久久久久久99精品| 色婷婷综合久久久| 亚洲第一在线综合网站| 激情图区综合网| 亚洲人快播电影网| 欧美性色aⅴ视频一区日韩精品| 久久黄色级2电影| 久久精品欧美日韩精品| 欧美色视频在线观看| 美美哒免费高清在线观看视频一区二区 | 精品国产3级a| 色综合中文字幕国产| 亚洲电影在线免费观看| 久久亚洲一区二区三区明星换脸 | 久久电影网电视剧免费观看| 国产精品第五页| 欧美一区二区三区在线看| 丁香啪啪综合成人亚洲小说| 天天色天天操综合| 中文字幕五月欧美| 欧美不卡一区二区三区| 欧美性极品少妇| 成人精品国产一区二区4080| 蜜臂av日日欢夜夜爽一区| 亚洲精品日韩一| 中文字幕精品—区二区四季| 欧美一二三四在线| 欧美在线一区二区| 国产91丝袜在线观看| 秋霞午夜av一区二区三区| 亚洲精品第一国产综合野| 欧美国产一区二区在线观看| 日韩久久久久久| 欧美久久久久免费| 日本电影亚洲天堂一区| 风间由美一区二区av101| 黄页网站大全一区二区| 亚洲成av人片在www色猫咪| 国产女同互慰高潮91漫画| 精品国产一区二区精华| 欧美福利视频导航| 欧美亚洲综合另类| 91黄色小视频| 一本色道a无线码一区v| 成人精品电影在线观看| 国产呦萝稀缺另类资源| 久久精品国产亚洲5555| 免费在线观看一区| 肉丝袜脚交视频一区二区| 亚洲国产日韩a在线播放性色| 一区二区三区在线观看视频| 自拍偷拍亚洲欧美日韩| 日韩理论片网站| 亚洲人成精品久久久久久|