您好,欢迎光临本网站![请登录][注册会员]  
文件名称: windos编程(通讯录)
  所属分类: Web开发
  开发工具:
  文件大小: 2mb
  下载次数: 0
  上传时间: 2009-04-23
  提 供 者: lj131137********
 详细说明: 简单,使用,仅供学习之用. 部分代码~~ // 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[] = { // GENERIC_SUCCESS { 250, _T( "SMTP服务器错误" ) }, // CONNECT_SUCCESS { 220, _T( "SMTP服务器不可用" ) }, // DATA_SUCCESS { 354, _T( "SMTP服务器不能接收数据" ) }, // QUIT _SUCCESS { 221, _T( "SMTP没有中止会话" ) } }; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CSMTP::CSMTP( LPCTSTR szSMTPServerName, UINT nPort ) { ASSERT( szSMTPServerName != NULL ); AfxSocketInit(); //初始化Windows Sockets类的使用 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( "内存不足!" ); return FALSE; } } catch( CException *e ) //使用基类进行捕捉 { response_buf = NULL; m_sError = _T( "内存不足!" ); delete e; 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, 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; } //取得SMTP服务器端口号 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( "必须首先创建连接!" ); 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 ); 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; 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; CString sSubject; ASSERT( msg != NULL ); if( !m_bConnected ) { m_sError = _T( "必须首先创建连接!" ); return FALSE; } 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; 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 ); } sTemp = _T( "DATA\r\n" ); m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() ); if( !get_response( DATA_SUCCESS ) ) { return FALSE; } sSubject.Format( _T( "SUBJECT: <%s>\r\n" ), (LPCTSTR)msg->m_sSubject ); m_wsSMTPServer.Send( (LPCTSTR)sSubject, sSubject.GetLength() ); // m_wsSMTPServer.Send( (LPCTSTR)msg->m_sHeader, msg->m_sHeader.GetLength() ); sTemp = cook_body( msg ); m_wsSMTPServer.Send( (LPCTSTR)sTemp, sTemp.GetLength() ); 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; 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; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: windos编程
 输入关键字,在本站1000多万海量源码库中尽情搜索: