SMTP基本原理与C++实现向多人发送邮件_,smtp 命令行 多个发件人

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

  1. MAIL–这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的。这个命令会清空有关的缓冲区,为新的邮件做准备。
  2. RCPT –这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令RCPT TO,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。
  3. DATA–收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是”.”的行结束数据。结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。如果传送接受,接收方回复OK。
  4. QUIT–SMTP要求接收放必须回答OK,然后中断传输;在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。
  5. AUTH LOGIN–登录邮箱,这一部分一般要用base64加密。

C++实现发送邮件

一下内容参考自 邮件正文及其附件的发送的C++实现,并添加了多个邮件接收者的功能

Smtp.h
#ifndef \_\_SMTP\_H\_\_ //避免重复包含
#define \_\_SMTP\_H\_\_

#include <list>
#include <WinSock2.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

const int MAXLEN = 1024;
const int MAX_FILE_LEN = 6000;

static const char base64Char[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

struct FILEINFO /\*用来记录文件的一些信息\*/
{
    char fileName[128]; /\*文件名称\*/
    char filePath[256]; /\*文件绝对路径\*/
};

class CSmtp
{
public:
    CSmtp(void);
    CSmtp(
        int port,
        std::string srvDomain,  //smtp服务器域名
        std::string userName,   //用户名
        std::string password,   //密码
        std::string targetEmail, //目的邮件地址
        std::string emailTitle,  //主题
        std::string content       //内容
        );
public:
    ~CSmtp(void);
public:
    int port;
public:
    std::string domain;
    std::string user;
    std::string pass;
    std::string targetAddr;
    std::string title;
    std::string content;
    /\*为了方便添加文件,删除文件神马的,使用list容器最为方便,相信大家在数据结构里面都学过\*/
    std::list <FILEINFO \*> listFile;

public:
    char buff[MAXLEN + 1];
    int buffLen;
    SOCKET sockClient;  //客户端的套接字
public:
    bool CreateConn(); /\*创建连接\*/

    bool Send(std::string &message);
    bool Recv();

    void FormatEmailHead(std::string &email);//格式化要发送的邮件头部
    int Login();
    bool SendEmailHead();       //发送邮件头部信息
    bool SendTextBody();        //发送文本信息
    //bool SendAttachment(); //发送附件
    int SendAttachment_Ex();
    bool SendEnd();
public:
    void AddAttachment(std::string &filePath); //添加附件
    void DeleteAttachment(std::string &filePath); //删除附件


![img](https://img-blog.csdnimg.cn/img_convert/1569c4f4865470f9ddb828319e8db2ec.png)
![img](https://img-blog.csdnimg.cn/img_convert/5bb18a6c35b9be094a707f29062c9f92.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

持续更新**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值