没有合适的资源?快使用搜索试试~ 我知道了~
C++发送邮件和附件
4星 · 超过85%的资源 需积分: 10 120 下载量 194 浏览量
2012-06-25
18:28:55
上传
评论
收藏 221KB DOC 举报
温馨提示
试读
12页
一个邮件发送类,经测试可以发送邮件及附件
资源推荐
资源详情
资源评论
C++
发送邮件和附件
头文件
1 /
***********************************************************************
2 *发送邮件模块头文件
3 *可以发送文本和附件(支持多个附件一起发送)
4 **********************************************************************
***/
5 #pragma once
6 struct sMailInfo //邮件信息
7 {
8 char* m_pcUserName;//用户登录邮箱的名称
9 char* m_pcUserPassWord;//用户登录邮箱的密码
10 char* m_pcSenderName;//用户发送时显示的名称
11 char* m_pcSender;//发送者的邮箱地址
12 char* m_pcReceiver;//接收者的邮箱地址
13 char* m_pcTitle;//邮箱标题
14 char* m_pcBody;//邮件文本正文
15 char* m_pcIPAddr;//服务器的 IP
16 char* m_pcIPName;//服务器的名称(IP 与名称二选一,优先取名称)
17 sMailInfo(){memset(this,0,sizeof(sMailInfo));}
18 };
19 class CSendMail
20 {
21 public:
22 CSendMail(void);
23 ~CSendMail(void);
24
25 public:
26 bool SendMail(sMailInfo &smailInfo);//发送邮件,需要在发送的时候初始化
邮件信息
27 void AddFilePath(char * pcFilePath);//添加附件的决定路径到附件列表中
28 void DeleteFilePath(char* pcFilePath);//删除附件路径,如果有的话
29 void DeleteAllPath(void);//删除全部附件的路径
30
31 protected:
32 void GetFileName(char* fileName,char* filePath);//从附件的路径中获取
文件名称
33 void Char2Base64(char* pBuff64,char* pSrcBuff,int iLen);//把 char 类
型转换成 Base64 类型
34 bool CReateSocket(SOCKET &sock);//建立 socket 连接
35 bool Logon(SOCKET &sock);//登录邮箱,主要进行发邮件前的准备工作
36 int GetFileData(char* FilePath);//由文件路径获取附件内容
37
38 bool SendHead(SOCKET &sock);//发送邮件头
39 bool SendTextBody(SOCKET &sock);//发送邮件文本正文
40 bool SendFileBody(SOCKET &sock);//发送邮件附件
41 bool SendEnd(SOCKET &sock);//发送邮件结尾
42 protected:
43 CList<char*,char*> m_pcFilePathList;//记录附件路径
44
45 char m_cSendBuff[4096];//发送缓冲区
46 char m_cReceiveBuff[1024];
47 char* m_pcFileBuff;//指向附件内容
48 sMailInfo m_sMailInfo;
49 };
模块实现文件
50 /
************************************************************************
51 * 发送邮件模块
52 *可以发送文本和附件(支持多个附件一起发送)
53 *Date:2011-12-01
54 **********************************************************************
**/
55 #include "StdAfx.h"
56 #include "SendMail.h"
57 #include "winsock2.h"
58 #pragma comment(lib,"WSOCK32")
59
60 CSendMail::CSendMail(void)
61 {
62 m_pcFileBuff=NULL;
63 memset(m_cSendBuff,0,sizeof(m_cSendBuff));
64 memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff));
65 }
66
67
68 CSendMail::~CSendMail(void)
69 {
70 DeleteAllPath();
71 }
72
73
74 void CSendMail::Char2Base64(char* pBuff64,char* pSrcBuff,int iLen)
75 {
76 //1 1 1 1 1 1 1 1
77 // 分配给 pBuff64 ↑ 分配给 pBuff64+1
78 // point 所在的位置
79 static char Base64Encode[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//
base64 所映射的字符表
80 int point;//每一个源字符拆分的位置,可取 2,4,6;初始为 2
81 point=2;
82 int i;
83 int iIndex;//base64 字符的索引
84 char n=0;//上一个源字符的残留值
85 for(i=0;i<iLen;i++)
86 {
87 if(point==2)
88 {
89 iIndex=((*pSrcBuff)>>point)&0x3f;//取得 pSrcBuff 的高 point 位
90 }
91 else if (point==4)
92 {
93 iIndex=((*pSrcBuff)>>point)&0xf;//取得 pSrcBuff 的高 point 位
94 }
95 else if(point==6)
96 {
97 iIndex=((*pSrcBuff)>>point)&0x3;//取得 pSrcBuff 的高 point 位
98 }
99 iIndex+=n;//与 pSrcBuff-1 的低 point 结合组成 Base64 的索引
100 *pBuff64++=Base64Encode[iIndex];//由索引表得到 pBuff64
101 n=((*pSrcBuff)<<(6-point));//计算源字符中的残留值
102 n=n&0x3f;//确保 n 的最高两位为 0
103 point+=2;//源字符的拆分位置上升 2
104 if(point==8)//如果拆分位置为 8 说明 pSrcBuff 有 6 位残留,可以组成一个完
整的 Base64 字符,所以直接再组合一次
105 {
106 iIndex=(*pSrcBuff)&0x3f;//提取低 6 位,这就是索引了
107 *pBuff64++=Base64Encode[iIndex];//
108 n=0;//残留值为 0
109 point=2;//拆分位置设为 2
110 }
剩余11页未读,继续阅读
HandanXiaoliang
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页