C++发送邮件实现代码
本文实例为大家分享了C++发送邮件的具体代码,供大家参考,具体内容如下
首先,别忘了要设置发送邮箱的smtp,例如,假设你需要用网易邮箱,你需要去你的163邮箱设置开启smtp(有的邮箱还需要设置授权码)。接着就可以用以下代码发送邮件了:
//SendMail.h #ifndef_SEND_MAIL_H_ #define_SEND_MAIL_H_ #include#include #include #include usingnamespacestd; //协议中加密部分使用的是base64方法 charConvertToBase64(charc6); voidEncodeBase64(char*dbuf,char*buf128,intlen); voidSendMail(char*email,constchar*body); intOpenSocket(structsockaddr*addr); #endif
//SendMail.cpp #include"SendMail.h" #pragmacomment(lib,"ws2_32.lib") structBase64Date6 { unsignedintd4:6; unsignedintd3:6; unsignedintd2:6; unsignedintd1:6; }; charConvertToBase64(charuc) { if(uc<26) { return'A'+uc; } if(uc<52) { return'a'+(uc-26); } if(uc<62) { return'0'+(uc-52); } if(uc==62) { return'+'; } return'/'; } //base64的实现 voidEncodeBase64(char*dbuf,char*buf128,intlen) { structBase64Date6*ddd=NULL; inti=0; charbuf[256]={0}; char*tmp=NULL; charcc='\0'; memset(buf,0,256); strcpy_s(buf,256,buf128); for(i=1;i<=len/3;i++) { tmp=buf+(i-1)*3; cc=tmp[2]; tmp[2]=tmp[0]; tmp[0]=cc; ddd=(structBase64Date6*)tmp; dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1); dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2); dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3); dbuf[(i-1)*4+3]=ConvertToBase64((unsignedint)ddd->d4); } if(len%3==1) { tmp=buf+(i-1)*3; cc=tmp[2]; tmp[2]=tmp[0]; tmp[0]=cc; ddd=(structBase64Date6*)tmp; dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1); dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2); dbuf[(i-1)*4+2]='='; dbuf[(i-1)*4+3]='='; } if(len%3==2) { tmp=buf+(i-1)*3; cc=tmp[2]; tmp[2]=tmp[0]; tmp[0]=cc; ddd=(structBase64Date6*)tmp; dbuf[(i-1)*4+0]=ConvertToBase64((unsignedint)ddd->d1); dbuf[(i-1)*4+1]=ConvertToBase64((unsignedint)ddd->d2); dbuf[(i-1)*4+2]=ConvertToBase64((unsignedint)ddd->d3); dbuf[(i-1)*4+3]='='; } return; } //发送邮件 voidSendMail(char*email,constchar*body) { intsockfd={0}; charbuf[1500]={0}; charrbuf[1500]={0}; charlogin[128]={0}; charpass[128]={0}; WSADATAWSAData; structsockaddr_intheir_addr={0}; WSAStartup(MAKEWORD(2,2),&WSAData); memset(&their_addr,0,sizeof(their_addr)); their_addr.sin_family=AF_INET; their_addr.sin_port=htons(25);//一般是25端口不需要改 hostent*hptr=gethostbyname("smtp.126.com");//端口和服务器 memcpy(&their_addr.sin_addr.S_un.S_addr,hptr->h_addr_list[0],hptr->h_length); printf("IPofsmpt.163.comis:%d:%d:%d:%d\n", their_addr.sin_addr.S_un.S_un_b.s_b1, their_addr.sin_addr.S_un.S_un_b.s_b2, their_addr.sin_addr.S_un.S_un_b.s_b3, their_addr.sin_addr.S_un.S_un_b.s_b4); //连接邮件服务器,如果连接后没有响应,则2秒后重新连接 sockfd=OpenSocket((structsockaddr*)&their_addr); memset(rbuf,0,1500); while(recv(sockfd,rbuf,1500,0)==0) { cout<<"reconnect..."<\r\n");//此处要和发邮件的邮箱保持一致 send(sockfd,buf,strlen(buf),0); memset(rbuf,0,1500); recv(sockfd,rbuf,1500,0); cout<<"setMailFromReceive:"< \r\n",email); send(sockfd,buf,strlen(buf),0); memset(rbuf,0,1500); recv(sockfd,rbuf,1500,0); cout<<"TellSendtoReceive:"< 测试例程:
//SendMailTest.cpp #include"SendMail.h" intmain() { intnum=100; stringEmailContents="From:\"lucy\"\r\n" +string("To:\"dasiy\" \r\n") +"Subject:Hello\r\n\r\n" +"testsendingvariable"+to_string(num)+"\n"; charEmailTo[]="yyyy@126.com";//此处是送达的邮箱,需和EmailContents里的保持一致 SendMail(EmailTo,EmailContents.c_str()); return0; } 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。