亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++發送郵件實現代碼

2020-05-23 13:26:38
字體:
來源:轉載
供稿:網友

本文實例為大家分享了C++發送郵件的具體代碼,供大家參考,具體內容如下

首先,別忘了要設置發送郵箱的smtp,例如,假設你需要用網易郵箱,你需要去你的163郵箱設置開啟smtp(有的郵箱還需要設置授權碼)。接著就可以用以下代碼發送郵件了:

// SendMail.h#ifndef _SEND_MAIL_H_#define _SEND_MAIL_H_#include <windows.h>#include <stdio.h>#include <WinSock.h>#include <iostream>using namespace std;// 協議中加密部分使用的是base64方法char ConvertToBase64(char c6);void EncodeBase64(char *dbuf, char *buf128, int len);void SendMail(char *email, const char *body);int OpenSocket(struct sockaddr *addr);#endif

 

// SendMail.cpp#include "SendMail.h"#pragma comment(lib, "ws2_32.lib")struct Base64Date6{  unsigned int d4 : 6;  unsigned int d3 : 6;  unsigned int d2 : 6;  unsigned int d1 : 6;};char ConvertToBase64(char uc){  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的實現void EncodeBase64(char *dbuf, char *buf128, int len){  struct Base64Date6 *ddd = NULL;  int      i = 0;  char     buf[256] = { 0 };  char     *tmp = NULL;  char     cc = '/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 = (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);  }  if (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] = '=';  }  if (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] = '=';  }  return;}// 發送郵件void SendMail(char *email, const char *body){  int   sockfd = { 0 };  char  buf[1500] = { 0 };  char  rbuf[1500] = { 0 };  char  login[128] = { 0 };  char  pass[128] = { 0 };  WSADATA WSAData;  struct 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("IP of smpt.163.com is : %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);  while (recv(sockfd, rbuf, 1500, 0) == 0)  {    cout << "reconnect..." << endl;    Sleep(2);    sockfd = OpenSocket((struct sockaddr *)&their_addr);    memset(rbuf, 0, 1500);  }  cout << rbuf << endl;  // EHLO  memset(buf, 0, 1500);  sprintf_s(buf, 1500, "EHLO HYL-PC/r/n");  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "EHLO REceive: " << rbuf << endl;  // AUTH LOGIN  memset(buf, 0, 1500);  sprintf_s(buf, 1500, "AUTH LOGIN/r/n");  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Auth Login Receive: " << rbuf << endl;  // USER  memset(buf, 0, 1500);  sprintf_s(buf, 1500, "xxxxxx@126.com");//你的郵箱賬號  memset(login, 0, 128);  EncodeBase64(login, buf, strlen(buf));  sprintf_s(buf, 1500, "%s/r/n", login);  send(sockfd, buf, strlen(buf), 0);  cout << "Base64 UserName: " << buf << endl;  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "User Login Receive: " << rbuf << endl;  // PASSWORD  sprintf_s(buf, 1500, "********");//你的郵箱密碼  memset(pass, 0, 128);  EncodeBase64(pass, buf, strlen(buf));  sprintf_s(buf, 1500, "%s/r/n", pass);  send(sockfd, buf, strlen(buf), 0);  cout << "Base64 Password: " << buf << endl;  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Send Password Receive: " << rbuf << endl;  // MAIL FROM  memset(buf, 0, 1500);  sprintf_s(buf, 1500, "MAIL FROM: <xxxx@126.com>/r/n"); //此處要和發郵件的郵箱保持一致  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "set Mail From Receive: " << rbuf << endl;  // RCPT TO 第一個收件人  sprintf_s(buf, 1500, "RCPT TO:<%s>/r/n", email);  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Tell Sendto Receive: " << rbuf << endl;  // DATA 準備開始發送郵件內容  sprintf_s(buf, 1500, "DATA/r/n");  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Send Mail Prepare Receive: " << rbuf << endl;  // 發送郵件內容,/r/n./r/n內容結束標記  sprintf_s(buf, 1500, "%s/r/n./r/n", body);  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Send Mail Receive: " << rbuf << endl;  // QUIT  sprintf_s(buf, 1500, "QUIT/r/n");  send(sockfd, buf, strlen(buf), 0);  memset(rbuf, 0, 1500);  recv(sockfd, rbuf, 1500, 0);  cout << "Quit Receive: " << rbuf << endl;  //清理工作  closesocket(sockfd);  WSACleanup();  return;}// 打開TCP Socket連接int OpenSocket(struct sockaddr *addr){  int sockfd = 0;  sockfd = socket(PF_INET, SOCK_STREAM, 0);  if (sockfd < 0)  {    cout << "Open sockfd(TCP) error!" << endl;    exit(-1);  }  if (connect(sockfd, addr, sizeof(struct sockaddr)) < 0)  {    cout << "Connect sockfd(TCP) error!" << endl;    exit(-1);  }  return sockfd;}

測試例程:

// SendMailTest.cpp#include "SendMail.h"int main(){  int num = 100;  string EmailContents = "From: /"lucy/"<xxxx@126.com>/r/n"               + string("To: /"dasiy/"<yyyy@126.com>/r/n")              + "Subject: Hello/r/n/r/n"               + "test sending variable" + to_string(num) + "/n";  char EmailTo[] = "yyyy@126.com";  //此處是送達的郵箱, 需和EmailContents里的保持一致  SendMail(EmailTo, EmailContents.c_str());  return 0;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩在线| 裸体女人亚洲精品一区| 精品视频在线播放色网色视频| 美日韩精品视频免费看| 成人亚洲欧美一区二区三区| 欧美日韩国产成人| 欧美日韩在线观看视频小说| 亚洲桃花岛网站| 成人国产精品日本在线| 91日韩在线播放| 亚洲第一免费网站| y97精品国产97久久久久久| 欧美激情亚洲自拍| 欧美裸体xxxx极品少妇| 日韩有码在线观看| 国产不卡一区二区在线播放| 国产区精品在线观看| 欧洲美女7788成人免费视频| 国产欧美精品日韩| 亚洲热线99精品视频| 在线成人激情黄色| 久久久久久久久久久免费| 欧美成人免费va影院高清| 欧美中文在线观看国产| 91po在线观看91精品国产性色| 一区二区三区回区在观看免费视频| 欧美日韩亚洲精品一区二区三区| 中文字幕日韩有码| 久久久久久91香蕉国产| 国产精品视频公开费视频| 亚洲综合一区二区不卡| 亚洲精品久久久一区二区三区| www高清在线视频日韩欧美| 欧美日韩一区免费| 亚洲无线码在线一区观看| 日韩电影在线观看中文字幕| 精品国产区一区二区三区在线观看| 伊人激情综合网| 日韩美女福利视频| 成人激情视频小说免费下载| 在线观看91久久久久久| 欧美激情在线有限公司| 国产免费一区视频观看免费| 91久久精品美女高潮| 亚洲成人国产精品| 国产综合久久久久| www.国产一区| 欧美午夜美女看片| 精品国产欧美成人夜夜嗨| 久久精品久久久久久| 亚洲一二三在线| 久久91亚洲人成电影网站| 91超碰中文字幕久久精品| 国产免费一区视频观看免费| 欧美激情一区二区三区在线视频观看| 综合网日日天干夜夜久久| 2021久久精品国产99国产精品| 91免费看片在线| 国产在线视频不卡| 国产精品久久久久久久久久新婚| 亚洲国产精品免费| 国产丝袜一区二区| 久久亚洲综合国产精品99麻豆精品福利| 久久久久日韩精品久久久男男| 91影院在线免费观看视频| 欧美交受高潮1| 日韩在线观看电影| 国产精品普通话| 国产精品第8页| 久久91亚洲精品中文字幕奶水| 国产精品91在线| 久久久久久亚洲精品中文字幕| 欧美日韩成人在线观看| 久久躁日日躁aaaaxxxx| 日韩大胆人体377p| 国产成人拍精品视频午夜网站| 91久久久久久久| 欧美黄色性视频| 久久久精品免费视频| 国产精品福利小视频| 狠狠色狠狠色综合日日小说| 91精品国产91久久久久久久久| 成人久久久久爱| 97精品久久久中文字幕免费| 精品福利在线观看| 91日韩在线视频| 亚洲a在线观看| 亚洲欧美激情精品一区二区| 日本欧美爱爱爱| 久久久久久久久中文字幕| 欧美一区二区三区图| 96pao国产成视频永久免费| 国产午夜精品视频| 欧美日本高清一区| 久久99青青精品免费观看| 亚洲视频国产视频| 中文字幕亚洲综合久久筱田步美| 97色在线观看| 国产欧美日韩精品专区| 欧美制服第一页| 久久久久久亚洲| 456国产精品| 91禁外国网站| 欧美日韩第一视频| 中文字幕亚洲字幕| 亚洲va久久久噜噜噜| 国产91网红主播在线观看| 欧美精品中文字幕一区| 国产v综合ⅴ日韩v欧美大片| 亚洲日韩欧美视频一区| 91精品国产综合久久香蕉的用户体验| 亚洲电影免费观看高清| 国产精品盗摄久久久| 欧美精品生活片| 日韩中文字幕网址| 国产成人免费av电影| 欧美中文字幕在线播放| 国产中文字幕91| 亚洲尤物视频网| 欧美电影免费观看大全| 久久精品男人天堂| 国产视频丨精品|在线观看| 国产91精品黑色丝袜高跟鞋| 国产女同一区二区| 亚洲自拍偷拍视频| 欧美激情女人20p| 精品偷拍各种wc美女嘘嘘| 精品久久久久久久久久久| 久久综合免费视频影院| 国产精品一二区| 97视频在线播放| 亚洲第一区中文字幕| 亚洲人成网站999久久久综合| 亚洲人成五月天| 欧美亚洲午夜视频在线观看| 久久久精品免费| 日韩一级裸体免费视频| 伊人一区二区三区久久精品| 日韩av在线网址| 日本一区二区三区在线播放| 黑人狂躁日本妞一区二区三区| 日韩av电影国产| 久久久久久久久网站| 久久国产精品偷| 国产精品99久久99久久久二8| 性色av香蕉一区二区| 亚洲综合在线中文字幕| 成人网在线免费观看| 久热在线中文字幕色999舞| 精品一区二区三区三区| 欧美日韩第一视频| 欧美日韩精品国产| 亚洲国产精品专区久久| 久久久久久久国产精品| 91色精品视频在线| 欧美夫妻性生活视频| 日韩av网址在线观看| 亚洲男人天堂手机在线| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美日韩一区二区三区在线| 国产精品 欧美在线| 91夜夜未满十八勿入爽爽影院| 日日狠狠久久偷偷四色综合免费| 91精品一区二区|