C++发送邮件 通过QQ邮箱发送邮件 通过QQ邮箱发送验证码

             先上代码 !

#pragma once
#ifndef _OperateEmil_
#define _OperateEmil_

#include<stdio.h>
#include<WinSock2.h>
#include<string>
#include<random>
#include<ctime>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

void SEND_emil(string Recipient);//发送emil


void SEND_emil(string Recipient)//形参收件人邮箱
{
    WSADATA wsadata;
    WSAStartup(MAKEWORD(2, 2), &wsadata);

    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in local;
    local.sin_family = AF_INET;
    local.sin_port = htons(25);
    local.sin_addr.S_un.S_addr = inet_addr("183.47.101.192");//win+R cmd ping smtp.qq.com

    connect(sock, (struct sockaddr*)&local, sizeof(struct sockaddr));

    char buff[1024] = { 0 };
    recv(sock, buff, 1024, 0);

    string SendMsg = "HELO MSG\r\n";
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);


    SendMsg = "AUTH LOGIN\r\n";
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);

    string Username = "BASE64在线编码 邮箱账号\r\n";//BASE64编码账号
    send(sock, Username.c_str(), Username.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);

    string Userpassword = "BASE64在线编码 授权码\r\n";//BASE64编码授权码
    send(sock, Userpassword.c_str(), Userpassword.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);


    SendMsg = "MAIL FROM:<xxxxxxxxx@qq.com>\r\n";//发件人自己的邮箱账号
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);


    SendMsg = "RCPT TO:<";
    SendMsg += Recipient;//收件人的邮箱
    SendMsg += ">\r\n";
    //"RCPT TO:<xxxxxxxxx@qq.com>\r\n";
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);


    SendMsg = "DATA\r\n";
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);

    default_random_engine e;//创建一个随机验证码
    uniform_int_distribution<int> u(10000, 99999); // 左闭右闭区间
    e.seed(time(0));
    string code = to_string(u(e));


    SendMsg = "From:<xxxxxxxxx@qq.com> \r\nSubject:验证码\r\n\r\n 【Mysterious】验证码 ";//发件人邮箱
    SendMsg += code;
    SendMsg += " 用于Mysterious身份验证,请勿泄露和转发。如非本人操作,请忽略此邮件。\r\n\r\n\r\n.\r\n";

    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);

    SendMsg = "QUIT\r\n";
    send(sock, SendMsg.c_str(), SendMsg.length(), 0);
    memset(buff, 0, 1024);
    recv(sock, buff, 1024, 0);
}

#endif

注意修改代码中的 XXXXXXXXXXX      ,邮箱和授权码都需要BASE64编码,

正文内容可自行修改,\r\n必须保留

BASE64在线编码网站:Base64编码、解码 - 站长工具 (chinaz.com) 

如何获取授权码: 帮助系统 (qq.com)

需要判断步骤是否成功,可以输出每步的buff.下面就是成功发送邮件并输出每一步的buff

 

 这样就成功了!

具体的步骤如下:

1.初始化 WinSock2 库。
2.创建一个套接字(socket)。
3.设置邮件服务器的地址和端口,并与服务器建立连接。
4.接收服务器的响应信息。
5.发送 HELO 命令,握手确认。
6.接收服务器的响应信息。
7.发送 AUTH LOGIN 命令,进行身份验证。
8.接收服务器的响应信息。
9.发送经过 BASE64 编码的邮箱账号和授权码,进行身份验证。
10.接收服务器的响应信息。
11.发送发件人的邮箱账号。
12.接收服务器的响应信息。
13.发送收件人的邮箱地址。
14.接收服务器的响应信息。
15.发送 DATA 命令,开始传输邮件内容。
16.接收服务器的响应信息。
17.生成一个随机验证码。
18.构造邮件内容,包括发件人、主题和验证码。
19.发送邮件内容给服务器。
20.接收服务器的响应信息。
21.发送 QUIT 命令,断开与服务器的连接。
22.接收服务器的响应信息。

注:侵权删!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
"C 发送邮件 QQ" 是指使用 C 语言编写程序来实现通过 QQ 邮箱发送邮件的功能。以下是一个简单的解释: QQ 邮箱是腾讯公司提供的一种电子邮件服务。要通过 C 语言发送 QQ 邮件,需要使用一些相关的库和协议来进行邮件发送和接收操作。 C 语言本身并不直接支持邮件发送功能,但可以利用第三方库来实现。一个常用的库是 libcurl,它是一个强大且广泛使用的网络传输库,可以用来发送 HTTP 请求。在 C 语言中,可以使用 libcurl 提供的接口来发送 HTTP 请求来执行发送邮件的操作。 首先,需要在 C 代码中包含 libcurl 的头文件,并链接对应的库文件。然后,通过初始化 libcurl 的函数来创建一个会话,设置相应的选项,如收件人、发件人、主题、正文内容等。接下来,使用 libcurl 提供的函数发送 HTTP POST 请求,将邮件内容以及相关的身份验证参数传递给 QQ 邮箱的服务器地址。最后,根据 QQ 邮箱服务器的响应,判断邮件发送是否成功,并进行相应的处理。 需要注意的是,发送邮箱是一个涉及到网络传输和身份验证的操作,需要保证网络连接的稳定性、合法的身份验证信息以及可信的邮件内容,以避免被视为垃圾邮件或滥用邮件发送功能。 综上所述,通过使用 C 语言编写包含 libcurl 库的程序,可以实现通过 QQ 邮箱发送邮件的功能。但这只是一个简单的示例,实际开发中需要考虑更多的细节和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值