下载 >  开发技术 >  Web开发 > windos编程(通讯录)

windos编程(通讯录) 评分:

简单,使用,仅供学习之用. 部分代码~~ // 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; }
...展开详情收缩
2009-04-23 上传大小:2.19MB
分享
收藏 举报

评论 共1条

lj13113716721312 谢谢,看实际代码比书本上的代码更能详述细节
2012-10-09
回复
基于Windows消息机制的人机交互的研究与应用

关于Windos编程的经典之作,配有大量实例

立即下载
火车时刻管理系统

可以熟悉windos编程 实现窗口操作

立即下载
简单通讯录程序:编程实现简单通讯录程序。

简单通讯录程序:编程实现简单通讯录程序。通讯者的基本信息包括编号、姓名、性别、年龄、宅电、手机电话等信息。具体实现的管理功能如下: (1) 输入并显示多个通讯者的信息; (2) 可实现通讯者信息的添加; (3) 查询(至少提供按姓名和手机查询两种方式); (4) 修改(只提供按照姓名进行修改); (5) 删除(依据指定的信息删除如姓名、编号等); (6)文件的导入和导出(从文件中读取若干条通讯录,或者将通讯录输出到文件中)。

立即下载
通讯录程序

本程序是一个通讯录的系统,很好,大家可以参考,里面有源文件和exe文件,你们下载之后我相信一定会看懂的!

立即下载
脚本--windos 系统安全

脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全脚本--windos 系统安全

立即下载
C++控制台学生通讯录管理系统(类实现)

C++控制台学生通讯录管理系统,用面向对象方式编写,的利用类,指针,单链表,文件读取等C++的知识,功能有建立通讯录,添加,修改,插入,查询,删除,保存等功能其中数据库保存功能自动实现;采用多文件连编。用VC++6以及VC++2010 编译通过,如果你是VC2010以上的版本你可以把下面的代码 #define _VC6_VER_//VC2010以上版本这里改成#define _VC2010_VER_ 改成:#define _VC2010_VER_,这样就可以开启里面的两个运算符重载代码

立即下载
windos快捷键 快捷键

windos快捷键,windos快捷键,windos快捷键,windos快捷键

立即下载
C++程序设计通讯录

这个是我的程序,大家有用的可以参考一下,希望大家以后互相帮忙

立即下载
windows中断.zip

windos编程中断部分的帮助文件,了解中断有帮助

立即下载
Java通讯录编程

Java通讯录编程,通讯录编程代码.。。。。

立即下载
WINDOS编程教程

该压缩包内有多个ppt文件,详细介绍了windows编程的相关知识,以供参考学习

立即下载
C#windos服务开发手册

windos服务windos服务windos服务

立即下载
VS实现简单通讯录

使用VS实现简单通讯录,采用C#,帮助同学们更加深入地了解实验!

立即下载
C++实现简单的通讯录管理

C++实现的简单通讯录管理,适用于c++学习后的课程设计。

立即下载
python通讯录(含数据库)

python简易通讯录,可以作为python作业,比较完整,可以使用

立即下载
WIN—WDM开发实用教程

windos 驱动 设备windos 驱动 设备windos 驱动 设备windos 驱动 设备

立即下载
C++编写的通讯录

利用C++的STL编写的简易通讯录,包含使用说明

立即下载
解决WINDOS远程协助的问题

解决远程协助问题 解决WINDOS远程协助的问题解决WINDOS远程协助的问题解决WINDOS远程协助的问题解决WINDOS远程协助的问题

立即下载
操作系统自带功能(拨打电话,发送信息,发送邮件,下载,调用通讯录

调用系统自带功能,拨打电话 发送信息 发送邮件 调用通讯录 下载...

立即下载
android手机通讯录备份还原代码

http://blog.csdn.net/xiaoxiao108/article/details/6901964 最近想写段android程序玩玩。 开发环境 eclipse ,android2.2 开发环境搭建 1.先安装jdk 2.下载安装eclipse 3.下载安装android sdk 4.安装eclipse插件 adt 5.配置 Window > Preferences 中的android sdk路径 6.创建 AVD 实现方法很简单 1.把通讯录中的联系人,电话号码保存到txt文件中完成备份。 2.读取txt文件,导入到通讯录完成还原。 具体代码 1.添加 通讯录读

立即下载

热点文章

img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

资源所需积分/C币 当前拥有积分 当前拥有C币
5 0 0
点击完成任务获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
img

windos编程(通讯录)

会员到期时间: 剩余下载个数: 剩余C币: 剩余积分:0
为了良好体验,不建议使用迅雷下载
VIP下载
您今日下载次数已达上限(为了良好下载体验及使用,每位用户24小时之内最多可下载20个资源)

积分不足!

资源所需积分/C币 当前拥有积分
您可以选择
开通VIP
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
为了良好体验,不建议使用迅雷下载
确认下载
img

资源所需积分/C币 当前拥有积分 当前拥有C币
3 0 0
为了良好体验,不建议使用迅雷下载
VIP和C币套餐优惠
img

资源所需积分/C币 当前拥有积分 当前拥有C币
5 4 45
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
确认下载
下载
您还未下载过该资源
无法举报自己的资源

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

  • 举报人:
  • 被举报人:
  • *类型:
    • *投诉人姓名:
    • *投诉人联系方式:
    • *版权证明:
  • *详细原因: