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

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

?? smtp.cpp

?? 本實(shí)例是一個(gè)FOXMAIL郵件轉(zhuǎn)發(fā)器
?? CPP
字號(hào):
// 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 ];	
	if( m_bConnected )
		return TRUE;
	
	try
	{
		response_buf = new TCHAR[ RESPONSE_BUFFER_SIZE ];

		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;
	CString sQuit = _T( "QUIT\r\n" );
	m_wsSMTPServer.Send( (LPCTSTR)sQuit, sQuit.GetLength() );

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


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四区五区入口| 亚洲欧美色一区| 美女网站色91| 欧美一区二区三区视频在线| 日韩精品欧美精品| 日韩美女一区二区三区四区| 韩日精品视频一区| 国产日韩欧美精品电影三级在线| 国产91在线观看丝袜| 国产精品欧美一区喷水| 91色九色蝌蚪| 午夜精品福利视频网站| 日韩区在线观看| 国产91精品免费| 亚洲韩国精品一区| 精品精品国产高清a毛片牛牛| 国产一级精品在线| 亚洲欧洲国产日韩| 91精品国模一区二区三区| 精品伊人久久久久7777人| 国产精品久久久久久久岛一牛影视| 色菇凉天天综合网| 免费观看久久久4p| 最新日韩av在线| 91精品国产高清一区二区三区蜜臀| 黑人精品欧美一区二区蜜桃 | 国产精品一区二区x88av| 欧美激情一区二区三区蜜桃视频| 色婷婷久久综合| 麻豆精品一区二区综合av| 亚洲欧洲日韩女同| 欧美精品一区二区久久婷婷| av欧美精品.com| 老司机午夜精品99久久| |精品福利一区二区三区| 日韩欧美精品在线视频| 色悠悠亚洲一区二区| 美女任你摸久久 | 欧美成人在线直播| 91啦中文在线观看| 国内精品免费在线观看| 亚洲一区中文日韩| 国产精品污污网站在线观看| 制服丝袜国产精品| 欧美综合天天夜夜久久| 粉嫩高潮美女一区二区三区| 日韩激情一区二区| 亚洲一区av在线| 中文字幕欧美国产| 久久亚洲精精品中文字幕早川悠里| 色94色欧美sute亚洲线路一久| 狠狠色丁香久久婷婷综| 视频一区国产视频| 一区二区三区四区精品在线视频 | 国产日韩欧美高清在线| 欧美一卡在线观看| 欧美日韩不卡一区| 欧美探花视频资源| 色综合久久综合网欧美综合网 | 成人免费高清视频在线观看| 麻豆成人久久精品二区三区小说| 亚洲伊人色欲综合网| 中文字幕在线不卡一区| 久久天堂av综合合色蜜桃网| 欧美一级片在线看| 欧美精品第1页| 8v天堂国产在线一区二区| 欧美亚洲一区二区在线| 91日韩精品一区| 91在线码无精品| 99热精品一区二区| 成人app在线| 99久久精品久久久久久清纯| jlzzjlzz亚洲日本少妇| 不卡一卡二卡三乱码免费网站| 国产激情一区二区三区四区 | 国产一区二区在线影院| 视频在线在亚洲| 久久久精品综合| 中文字幕第一页久久| 精品日韩99亚洲| 精品国产一区二区三区久久久蜜月 | 国产亚洲欧美在线| 亚洲激情一二三区| 黄色资源网久久资源365| 91网页版在线| 精品欧美一区二区三区精品久久| 亚洲人成网站影音先锋播放| 日韩电影在线免费观看| 粉嫩一区二区三区在线看| 欧美精品色综合| 中文字幕亚洲精品在线观看| 麻豆视频一区二区| 91搞黄在线观看| 国产欧美视频在线观看| 天天色综合成人网| 99re视频精品| 久久人人超碰精品| 日日骚欧美日韩| 色综合久久久久综合体桃花网| 日韩欧美一级精品久久| 亚洲免费观看高清完整版在线| 久久国产精品99久久人人澡| 欧美在线观看你懂的| 中文乱码免费一区二区| 久久成人麻豆午夜电影| 欧美撒尿777hd撒尿| 国产精品传媒入口麻豆| 久久er99精品| 日韩小视频在线观看专区| 亚洲一区二区欧美激情| 国产成人亚洲综合a∨婷婷| 欧美日韩国产欧美日美国产精品| 亚洲欧美视频在线观看视频| 福利一区在线观看| 久久蜜桃一区二区| 久久精品国产99| 91精品国产手机| 亚洲18影院在线观看| 色婷婷综合中文久久一本| 欧美国产精品一区| 高清不卡在线观看| 国产视频一区二区在线| 国产一区二区不卡老阿姨| 一区二区三区在线不卡| 99久久综合国产精品| 亚洲欧洲成人精品av97| jlzzjlzz欧美大全| √…a在线天堂一区| 94-欧美-setu| 日韩一区在线免费观看| 成人性生交大合| 欧美国产日韩在线观看| 大美女一区二区三区| 中文字幕高清一区| av影院午夜一区| 亚洲天堂av老司机| 色婷婷av一区二区| 亚洲影院久久精品| 欧美日韩国产免费一区二区| 亚洲在线观看免费视频| 日本韩国欧美国产| 婷婷中文字幕综合| 91精品在线观看入口| 蜜桃视频在线观看一区| 日韩美女天天操| 国产很黄免费观看久久| 国产精品视频看| 91丨porny丨蝌蚪视频| 亚洲激情图片一区| 欧美乱熟臀69xxxxxx| 丝袜美腿一区二区三区| 日韩丝袜情趣美女图片| 国内精品第一页| 国产精品免费av| 99在线热播精品免费| 一级日本不卡的影视| 欧美久久久久久久久中文字幕| 麻豆精品视频在线| 亚洲国产精品成人综合色在线婷婷| 国产ts人妖一区二区| 亚洲欧美一区二区三区极速播放| 国产欧美日韩麻豆91| 91在线观看一区二区| 一区二区三区四区在线| 欧美一区二区三区在线观看视频 | 五月激情六月综合| 日韩欧美国产成人一区二区| 国产成人免费视频| 夜夜爽夜夜爽精品视频| 欧美一区二区三区四区高清| 国产精一区二区三区| 亚洲婷婷在线视频| 欧美电影影音先锋| 成人在线综合网| 亚洲在线观看免费| 国产亚洲欧美色| 欧美性色黄大片| 国产馆精品极品| 午夜精品爽啪视频| 中文字幕欧美日韩一区| 欧美一三区三区四区免费在线看| 国产精品69久久久久水密桃| 亚洲精品高清在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久女同精品一区二区| 91浏览器入口在线观看| 久久99久久99精品免视看婷婷| 日韩美女精品在线| 日韩免费观看2025年上映的电影| 成人激情开心网| 美女久久久精品| 亚洲欧美二区三区| 国产农村妇女毛片精品久久麻豆 | 亚洲精品在线免费播放| 欧美性受xxxx| 91视频xxxx| 国产福利一区二区三区视频在线| 香蕉av福利精品导航| 日韩理论在线观看|