c++发送邮件实现代码

  

本文实例为大家分享了c++发送邮件的具体代码,供大家参考,具体内容如下

  

首先,别忘了要设置发送邮箱的smtp,例如,假设你需要用网易邮箱,你需要去你的邮163箱设置开启smtp(有的邮箱还需要设置授权码)。接着就可以用以下代码发送邮件了:

     //SendMail.h   的ifndef _SEND_MAIL_H_   #定义_SEND_MAIL_H_      # include & lt; windows.h>   # include & lt; stdio.h>   # include & lt; WinSock.h>   # include & lt; iostream>   使用名称空间性病;//协议中加密部分使用的是base64方法   char ConvertToBase64 (char c6);   空白EncodeBase64 (char * dbuf, char * buf128, int len);   空白SendMail (char *电子邮件,const char *身体);   int OpenSocket (struct sockaddr * addr);      # endif      

     //SendMail.cpp      # include“SendMail.h”      # pragma评论(自由、“ws2_32.lib”)      struct Base64Date6   {   unsigned int d4: 6;   unsigned int d3: 6;   unsigned int d2: 6;   unsigned int d1: 6;   };         char ConvertToBase64 (char加州大学)   {   如果(加州大学& lt;26)   {   返回A +加州大学;   }   如果(加州大学& lt;52)   {   返回a + (uc - 26);   }   如果(加州大学& lt;62)   {   返回“0”+ (uc - 52);   }   如果(加州大学==62)   {   返回“+”;   }   返回'/';   }//base64的实现   空白EncodeBase64 (char * dbuf, char * buf128, int len)   {   struct Base64Date6 * ddd=零;   int i=0;   char buf [256]={0};   char * tmp=零;   char cc=' \ 0 ';      memset (buf 0 256);   strcpy_s (buf 256, buf128);   (i=1;我& lt;=len/3;我+ +)   {   tmp=buf + (i - 1) * 3;   cc=tmp [2];   tmp [2]=tmp [0];   tmp [0]=cc;   ddd=(struct Base64Date6 *) tmp;   dbuf [(i - 1) * 4 + 0]=ConvertToBase64 ((unsigned int) ddd→d1);   dbuf [(i - 1) * 4 + 1)=ConvertToBase64 ((unsigned int) ddd→d2);   dbuf [(i - 1) * 4 + 2]=ConvertToBase64 ((unsigned int) ddd→d3);   dbuf [(i - 1) * 4 + 3]=ConvertToBase64 ((unsigned int) ddd→d4);   }   如果(len % 3==1)   {   tmp=buf + (i - 1) * 3;   cc=tmp [2];   tmp [2]=tmp [0];   tmp [0]=cc;   ddd=(struct Base64Date6 *) tmp;   dbuf [(i - 1) * 4 + 0]=ConvertToBase64 ((unsigned int) ddd→d1);   dbuf [(i - 1) * 4 + 1)=ConvertToBase64 ((unsigned int) ddd→d2);   dbuf [(i - 1) * 4 + 2]=??   dbuf [(i - 1) * 4 + 3]=??   }   如果(len % 3==2)   {   tmp=buf + (i - 1) * 3;   cc=tmp [2];   tmp [2]=tmp [0];   tmp [0]=cc;   ddd=(struct Base64Date6 *) tmp;   dbuf [(i - 1) * 4 + 0]=ConvertToBase64 ((unsigned int) ddd→d1);   dbuf [(i - 1) * 4 + 1)=ConvertToBase64 ((unsigned int) ddd→d2);   dbuf [(i - 1) * 4 + 2]=ConvertToBase64 ((unsigned int) ddd→d3);   dbuf [(i - 1) * 4 + 3]=??   }   返回;   }//发送邮件   空白SendMail (char *电子邮件,const char *身体)   {   int sockfd={0};   char buf [1500]={0};   char rbuf [1500]={0};   字符登录[128]={0};   char通过[128]={0};   WSADATA WSADATA;   结构指向sockaddr_in their_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 (" smpt.163.com的IP是:% 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 ((struct sockaddr *), their_addr);   memset (rbuf 0 1500);   而(recv (sockfd rbuf 1500, 0)==0)   {   cout & lt; & lt;“重新连接…”& lt; & lt;endl;   睡眠(2);   sockfd=OpenSocket ((struct sockaddr *), their_addr);   memset (rbuf 0 1500);   }      cout & lt; & lt;rbuf & lt; & lt;endl;//EHLO   memset (buf 0 1500);   sprintf_s (buf, 1500,“EHLO HYL-PC \ r \ n”);   发送(sockfd,但,strlen (buf), 0);   memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;”EHLO收到:“& lt; & lt;rbuf & lt; & lt;endl;//身份验证登录   memset (buf 0 1500);   sprintf_s (buf, 1500,“身份验证登录\ r \ n”);   发送(sockfd,但,strlen (buf), 0);   memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;“身份验证登录获得:“& lt; & lt;rbuf & lt; & lt;endl;//用户   memset (buf 0 1500);   sprintf_s (buf, 1500,“xxxxxx@126.com”);//你的邮箱账号   memset(登录,0,128);   EncodeBase64(登录、buf strlen (buf));   sprintf_s (buf, 1500,“% s \ r \ n”,登录);   发送(sockfd,但,strlen (buf), 0);   cout & lt; & lt;“Base64用户名:“& lt; & lt;buf & lt; & lt;endl;   memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;用户登录收到:“& lt; & lt;rbuf & lt; & lt;endl;//密码   sprintf_s (buf, 1500,“* * * * * * * * ");//你的邮箱密码   memset(通过,0,128);   EncodeBase64 (buf, strlen (buf));   sprintf_s (buf, 1500,“% s \ r \ n”,通过);   发送(sockfd,但,strlen (buf), 0);   cout & lt; & lt;”Base64密码:“& lt; & lt;buf & lt; & lt;endl;      memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;“发送密码接收:“& lt; & lt;rbuf & lt; & lt;endl;//邮件从   memset (buf 0 1500);   sprintf_s (buf, 1500,“邮件:& lt; xxxx@126.com> \ r \ n”);//此处要和发邮件的邮箱保持一致   发送(sockfd,但,strlen (buf), 0);   memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;“来自接收的邮件:“& lt; & lt;rbuf & lt; & lt;endl;//收件人第一个收件的人   sprintf_s (buf, 1500,“收件人:& lt; % s> \ r \ n”,电子邮件);   发送(sockfd,但,strlen (buf), 0);   memset (rbuf 0 1500);   recv (sockfd rbuf 1500,0);   cout & lt; & lt;“告诉Sendto收到:“& lt; & lt;rbuf & lt; & lt;endl;//数据准备开始发送邮件内容   sprintf_s (buf, 1500,“数据\ r \ n”);   发送(sockfd,但,strlen (buf), 0);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

c++发送邮件实现代码