C++发送邮件和附件

2019-02-16 00:46

C++发送邮件和附件

头文件

? ? ? ? ? ? ? ? ?

/*********************************************************************** *发送邮件模块头文件

*可以发送文本和附件(支持多个附件一起发送)

*************************************************************************/ #pragma once

struct sMailInfo //邮件信息 {

char* m_pcUserName;//用户登录邮箱的名称 char* m_pcUserPassWord;//用户登录邮箱的密码

?? char* m_pcSenderName;//用户发送时显示的名称 ?? char* m_pcSender;//发送者的邮箱地址 ?? char* m_pcReceiver;//接收者的邮箱地址 ?? char* m_pcTitle;//邮箱标题 ?? char* m_pcBody;//邮件文本正文 ?? char* m_pcIPAddr;//服务器的IP

?? char* m_pcIPName;//服务器的名称(IP与名称二选一,优先取名称) ?? sMailInfo(){memset(this,0,sizeof(sMailInfo));} ?? };

?? class CSendMail ?? { ?? public:

?? CSendMail(void); ?? ~CSendMail(void); ?? ?? public:

?? bool SendMail(sMailInfo &smailInfo);//发送邮件,需要在发送的时候初始化邮件信息

?? void AddFilePath(char * pcFilePath);//添加附件的决定路径到附件列表中 ?? void DeleteFilePath(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 &sock);//建立socket连接

?? bool Logon(SOCKET &sock);//登录邮箱,主要进行发邮件前的准备工作

?? int GetFileData(char* FilePath);//由文件路径获取附件内容 ??

?? bool SendHead(SOCKET &sock);//发送邮件头

?? bool SendTextBody(SOCKET &sock);//发送邮件文本正文 ?? bool SendFileBody(SOCKET &sock);//发送邮件附件 ?? bool SendEnd(SOCKET &sock);//发送邮件结尾 ?? protected:

?? CList m_pcFilePathList;//记录附件路径 ??

?? char m_cSendBuff[4096];//发送缓冲区 ?? char m_cReceiveBuff[1024]; ?? char* m_pcFileBuff;//指向附件内容 ?? sMailInfo m_sMailInfo; ?? };

模块实现文件

?? /************************************************************************ ?? * 发送邮件模块

?? *可以发送文本和附件(支持多个附件一起发送) ?? *Date:2011-12-01

?? ************************************************************************/ ?? #include \ ?? #include \ ?? #include \

?? #pragma comment(lib,\ ??

?? CSendMail::CSendMail(void) ?? {

?? m_pcFileBuff=NULL;

?? memset(m_cSendBuff,0,sizeof(m_cSendBuff)); ?? memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff)); ?? } ?? ??

?? CSendMail::~CSendMail(void) ?? {

?? DeleteAllPath(); ?? } ?? ??

?? void CSendMail::Char2Base64(char* pBuff64,char* pSrcBuff,int iLen)

?? {

?? //1 1 1 1 1 1 1 1 ?? // 分配给pBuff64 ↑ 分配给pBuff64+1 ?? // point所在的位置 ?? static char Base64Encode[] =

\;//base64所映射的字符表

?? int point;//每一个源字符拆分的位置,可取2,4,6;初始为2 ?? point=2; ?? int i;

?? int iIndex;//base64字符的索引 ?? char n=0;//上一个源字符的残留值 ?? for(i=0;i

?? if(point==2) ?? {

?? iIndex=((*pSrcBuff)>>point)&0x3f;//取得pSrcBuff的高point位 ?? }

?? else if (point==4) ?? {

?? iIndex=((*pSrcBuff)>>point)&0xf;//取得pSrcBuff的高point位 ?? }

?? else if(point==6) ?? {

?? iIndex=((*pSrcBuff)>>point)&0x3;//取得pSrcBuff的高point位 ?? }

?? iIndex+=n;//与pSrcBuff-1的低point结合组成Base64的索引 ??? *pBuff64++=Base64Encode[iIndex];//由索引表得到pBuff64 ??? n=((*pSrcBuff)<<(6-point));//计算源字符中的残留值 ??? n=n&0x3f;//确保n的最高两位为0 ??? point+=2;//源字符的拆分位置上升2

??? if(point==8)//如果拆分位置为8说明pSrcBuff有6位残留,可以组成一个完整的Base64字符,所以直接再组合一次 ??? {

??? iIndex=(*pSrcBuff)&0x3f;//提取低6位,这就是索引了 ??? *pBuff64++=Base64Encode[iIndex];// ??? n=0;//残留值为0

??? point=2;//拆分位置设为2 ??? }

??? pSrcBuff++; ??? ??? } ??? if(n!=0) ??? {

??? *pBuff64++=Base64Encode[n]; ??? }

??? 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;i

??? temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i)); ??? if(strcmp(pcFilePath,temp)==0)//如果已经存在就不用再添加了 ??? {

??? return; ??? } ??? }

??? m_pcFilePathList.AddTail(pcFilePath); ??? } ???

??? void CSendMail::DeleteFilePath(char* pcFilePath)//删除附件路径 ??? {

??? int i; ??? char* temp;

??? for(i=0;i

??? temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i)); ??? if(strcmp(temp,pcFilePath)==0)//找到并删除它,如果没找到就算了 ??? {

??? m_pcFilePathList.RemoveAt(m_pcFilePathList.FindIndex(i)); ??? delete[] temp; ??? return;

??? } ??? } ??? } ??? ???

??? void CSendMail::DeleteAllPath(void) ??? {

??? m_pcFilePathList.RemoveAll(); ??? } ???

??? int CSendMail::GetFileData(char* FilePath) ??? {

??? m_pcFileBuff=NULL; ??? 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 CSendMail::GetFileName(char* fileName,char* filePath) ??? {

??? if(filePath==NULL || fileName==NULL) ??? {

??? return; ??? } ??? int i;


C++发送邮件和附件.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:可以让孩子每天背一句(英语)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: