版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+发送邮件和附件 头文件 /* *发送邮件模块头文件 *可以发送文本和附件(支持多个附件一起发送) * */ #pragma once struct sMaillnfo / 邮件信息 char * m_pcUserName; /用户登录邮箱的名称 char * m_pcUserPassWord; /用户登录邮箱的密码 char * m_pcSenderName; /用户发送时显示的名称 char * m_pcSender; /发送者的邮箱地址 char * m_pcReceiver; /接收者的邮箱地址 char * m_pcTitle; / 邮箱标题 char * m_pcBody; /邮
2、件文本正文 char char m_pclPAddr; /服务器的IP m_pcIPName; /服务器的名称(IP与名称二选一,优先取名称) sMaillnfo()memset( ; class CSendMail public : CSendMail( void ); CSendMail( void ); this ,0, sizeof (sMailInfo); public : bool SendMail(sMaillnfo /发送邮件,需要在发送的时候初始化邮件信 void AddFilePath( char * pcFilePath); /添加附件的决定路径到附件列表中 void D
3、eleteFilePath( char * pcFilePath); / 删除附件路径,如果有的话 void DeleteAllPath( void ); /删除全部附件的路径 protected : void GetFileName( char * fileName, char * filePath); / 从附件的路径中获取文件名称 void Char2Base64( char * pBuff64, char * pSrcBuff, int iLen); / 把 char 类型转换成 Base64类型 bool CReateSocket(SOCKET / 建立 socket 连接 bool
4、 Logon(SOCKET /登录邮箱,主要进行发邮件前的准备工作 int GetFileData(char /* *发送邮件模块 *可以发送文本和附件(支持多个附件一起发送) Date:2011-12-01 */ #include StdAfx.h #include SendMail.h #include winsock2.h #pragma comment(lib,WSOCK32) CSendMail:CSendMail( void ) m_pcFileBuff=NULL; memset(m_cSendBuff,0, sizeof (m_cSendBuff); memset(m_cRece
5、iveBuff,0,sizeof (m_cReceiveBuff); CSendMail:CSendMail(void ) DeleteAllPath(); void CSendMail:Char2Base64( char * pBuff64, char * pSrcBuff, int iLen) FilePath); /由文件路径获取附件内容 bool SendHead(SOCKET / 发送邮件头 bool SendTextBody(SOCKET /发送邮件文本正文 bool SendFileBody(SOCKET /发送邮件附件 bool SendEnd(SOCKET / 发送邮件结尾
6、protected CList m_pcFilePathList;/ 记录附件路径 char m_cSendBuff4096;/ 发送缓冲区 char m_cReceiveBuff1024; char * m_pcFileBuff;/指向附件内容 sMailInfo m_sMaillnfo; ; 模块实现文件 1 1 1 1 1 1 1 1 / 分配给 pBuff64 f 分配给 pBuff64+1 / point所在的位置 static char Base64Encode= ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456
7、789+/ ; base64 所映 射的字符表 int point; /每一个源字符拆分的位置,可取 2,4,6 ;初始为2 point=2; int i; int iIndex; /base64 字符的索引 char n=0; /上一个源字符的残留值 for (i=0;iiLen;i+) if (point=2) ilndex=(*pSrcBuff)point) / 取得 pSrcBuff 的高point else if (point=4) ilndex=(*pSrcBuff)point) /取得 pSrcBuff 的高point else if (point=6) ilndex=(*pSr
8、cBuff)point) /取得 pSrcBuff 的高point iIndex+=n; / 与 pSrcBuff-1 的低point 结合组成 Base64的索引 *pBuff64+=Base64Encodeilndex; / n=(*pSrcBuff)(6-point); /确保n的最咼两位为0 由索引表得到pBuff64 计算源字符中的残留值 / n=n /源字符的拆分位置上升 point+=2; if (point=8) /如果拆分位置为8说明pSrcBuff有6位残留,可以组成一个完整的 Base64字符,所以直接再组合一次 ilndex=(*pSrcBuff) /提取低6位,这就是
9、索引了 / n=0; point=2; /拆分位置设为2 pSrcBuff+; if (n!=0) *pBuff64+=Base64Encoden; if (iLen%3=2) /如果源字符串长度不是 3的倍数要用=补全 *pBuff64= =; else if (iLen%3=1) *pBuff64+=; *pBuff64= =; void CSendMail:AddFilePath( char * pcFilePath) / 添加附件路径 if (pcFilePath=NULL) return ; int i; char * temp; for (i=0;im_pcFilePathList
10、.GetCount();i+) temp=m_pcFilePathList.GetAt(m_pcFilePathList.Findlndex(i); if (strcmp(pcFilePath,temp)=0)/如果已经存在就不用再添加了 return ; m_pcFilePathList.AddTail(pcFilePath); void CSendMail:DeleteFilePath(char * pcFilePath) / 删除附件路径 int i; char * temp; for (i=0;im_pcFilePathList.GetCount();i+) temp=m_pcFile
11、PathList.GetAt(m_pcFilePathList.Findlndex(i); if (strcmp(temp,pcFilePath)=0)/找到并删除它,如果没找到就算了 m_pcFilePathList.RemoveAt(m_pcFilePathList.Findlndex(i); delete temp; return ; void CSendMail:DeleteAIIPath(void ) m_pcFilePathList.RemoveAII(); int CSendMail:GetFileData( char * FilePath) m_pcFileBuff=NULL;
12、 if (FilePath=NULL) return 0; CFile f; int len; USES_CONVERSION; if (!f.Open(A2W(FilePath),CFile:modeRead|CFile:modeNoTruncate|CFile:typeBinary ) return 0; len=( int )f.GetLength(); m_pcFileBuff= new char len+1; memset(m_pcFileBuff,0,len+1); f.Read(m_pcFileBuff,len); f.Close(); return len; void CSen
13、dMail:GetFileName( char * fileName, char * filePath) if (filePath=NULL | fileName=NULL) return ; int i; for (i=0;ih_addr_list); /使用名称 int ret = connect(sock,(sockaddr* ) return true ; sizeof (servaddr); / 建立连接 bool CSendMail:Logon(SOCKET memset(m_cSendBuff,O, sizeof (m_cSendBuff); sprintf_s(m_cSendB
14、uff,HELO rn); send(sock,m_cSendBuff,strlen(m_cSendBuff),0); recv(sock,m_cReceiveBuff,1024,0); if (m_cReceiveBuff0!= 2| m_cReceiveBuff1!= m_cReceiveBuff2!= 0) return false ; /开始会话 5 | memset(m_cSendBuff,0, sprintf_s(m_cSendBuff, sizeof (m_cSendBuff); AUTH LOGINrn); send(sock,m_cSendBuff,strlen(m_cSen
15、dBuff),0); recv(sock,m_cReceiveBuff,1024,0); if (m_cReceiveBuff0!= 3 m_cReceiveBuff2!= 4) return false ; | m_cReceiveBuff1!= /请求登录 3 | memset(m_cSendBuff,0, sizeof (m_cSendBuff); Char2Base64(m_cSendBuff,m_sMaillnfo.m_pcUserName,strlen(m_sMaillnfo.m_pcUserName ); r m_cSendBuffstrlen(m_cSendBuff)= m_c
16、SendBuffstrlen(m_cSendBuff)=n; send(sock,m_cSendBuff,strlen(m_cSendBuff),0);/ 发送用户名 recv(sock,m_cReceiveBuff,1024,0); if (m_cReceiveBuff0!= 3| m_cReceiveBuff1!=3| m_cReceiveBuff2!= 4) return false ; memset(m_cSendBuff,0, sizeof (m_cSendBuff); Char2Base64(m_cSendBuff,m_sMaillnfo.m_pcUserPassWord,strl
17、en(m_sMaillnfo.m_pcUser Password); m_cSendBuffstrlen(m_cSendBuff)=r; m_cSendBuffstrlen(m_cSendBuff)=n; send(sock,m_cSendBuff,strlen(m_cSendBuff),0);/ 发送用户密码 recv(sock,m_cReceiveBuff,1024,0); if (m_cReceiveBuff0!= 2| m_cReceiveBuff1!=3| m_cReceiveBuff2!= 5) return false ; return true ; / 登录成功 bool CS
18、endMail:SendHead(SOCKET memset(m_cSendBuff,0, sizeof (m_cSendBuff); sprintf_s(m_cSendBuff,MAIL FROM:v%srn ,m_sMaillnfo.m_pcSender); rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); if (rt!=strlen(m_cSendBuff) return false ; recv(sock,m_cReceiveBuff,1024,0); memset(m_cSendBuff,0, sizeof (m_cSendBuff)
19、; sprintf_s(m_cSendBuff,RCPT TO:rn ,m_sMaillnfo.m_pcReceiver); rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); if (rt!=strlen(m_cSendBuff) return false ; recv(sock,m_cReceiveBuff,1024,0); memset(m_cSendBuff,O, sizeof (m_cSendBuff); memcpy(m_cSendBuff,DATArn ,strlen( DATArn); rt=send(sock,m_cSendBuf
20、f,strlen(m_cSendBuff),0); if (rt!=strlen(m_cSendBuff) return false ; recv(sock,m_cReceiveBuff,1024,0); memset(m_cSendBuff,0, sizeof (m_cSendBuff); sprintf_s(m_cSendBuff, From:%sv%srn ,m_sMaillnfo.m_pcSenderName,m_sMailln fo.m_pcSender); To:INVT.COM.CNv%srn ,m_s Subject:%srnMime-Version: sprintf_s( s
21、printf_s( boundary=INVTrnrn,m_sMaillnfo.m_pcTitle); rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); if (rt!=strlen(m_cSendBuff) return false ; return true bool CSendMail:SendTextBody(SOCKET memset(m_cSendBuff,0, sizeof (m_cSendBuff); sprintf_s(m_cSendBuff,-INVTrnContent-Type: text/plain;rn charset=
22、gb2312rnrn%srnrn,m_sMaillnfo.m_pcBody); rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); if (rt!=strlen(m_cSendBuff) return false return true ; else bool CSendMail:SendFileBody(SOCKET char * filePath; int rt; int len; int pt=O; char fileName128; for (i=O;im_pcFilePathList.GetCount();i+) pt=0; memset
23、(fileName,0,128); filePath=m_pcFilePathList.GetAt(m_pcFilePathList.Findlndex(i); len=GetFileData(filePath); GetFileName(fileName,filePath); sprintf_s(m_cSendBuff,-INVTrnContent-Type: application/octet-stream;rn name=%srnContent-Transfer-Encoding: base64rnContent-Disposition: attachment;rn filename=%srnrn,fileName,fileName); send(sock,m_cSendBuff,strlen(m_cSendBuff),0); while (ptlen) memset(m_cSendBuff,0,sizeof (m_cSendBuff); Char2Base64(m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南宁市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(综合题)
- 滁州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(考试直接用)
- 松原市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(培优a卷)
- 2025年高压电工复审(湖南)电工作业模拟考试题库(附答案)
- 2025年高血压病护理试题及答案
- 2025年高危妊娠管理试题及答案
- 湘西土家族苗族自治州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合卷)
- 2025年飞行员执照考试《航线运输驾驶员(135飞机)》能力提高训练题及答案
- 2025年飞行员执照考试(航线运输驾驶员直升机)模拟试题及答案二
- 钦州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)带答案详解(完整版)
- 国开2025年秋《农业推广》形成性考核1-3答案
- 宫颈癌放疗患者的护理
- DB-T 29-88-2025 天津市民用建筑围护结构节能检测技术规程
- 竞聘词课件教学课件
- 2025-2026学年大象版(2024)小学科学三年级上册(全册)教学设计(附目录P208)
- 融媒体概论课件
- 中央空调系统维护技术规范
- 固态相变原理及应用
- 脊柱损伤患者搬运课件
- 李清照的如梦令课件
- 正大杯全国大学生市场调查与分析大赛(试题340道含答案)
评论
0/150
提交评论