Qt5基于smtp服务发送电子邮件
1、设置邮箱
先登录163邮箱,然后在邮箱界面找到设置,在里面开通smtp服务。
这一步比较关键,要开通smtp服务,在开通的过程中会让你输入一个邮箱客户端授权码,这个才是你后面要用到的密码,而不是你登陆邮箱的密码;

2. telnet命令发送邮件
打开cmd.
1. 输入 telnet smtp.163.com 25 回车
我试验了好几个邮箱服务器,大都有严厉的反垃圾邮件系统,导致邮件发不出去,幸好163的邮箱竟然可以.TX威武呀.smtp的协议端口为25.
2. 输入 HELO smtp.163.com 回车
我搜集的一些资料中既有使用helo又有使用ehlo的,结果还使我纠结了好久,后来又google才知道,原来都可以.这句应该是与服务器打招呼.如果返回250表示服务器准备就绪,可以进行下一步了.
3. 输入 AUTH LOGIN 回车
这是指定登录的模式,这句应该是一般模式.返回334就可以进行下一步了.
4. 输入 经过base64加密的你的账户名,比如你的邮箱账号号是xxxxxx@163.com,就去百度下 base64加密这个邮箱账号(是加密整个邮箱账号),copy到命令行回车返回334
5.输入对应的授权码(base64加密这个授权码),注意是163邮箱的授权码,不是密码。回复235 Authentication successful表示验证通过,可以进行下一步了.
6. 输入 mail from:<xxxxxx@163.com> 这里写你的163邮箱,服务器返回250.
7. 输入 rcpt to:<xxxxxx@qq.com> 这里写你要发送给的qq邮箱,服务器返回250,下一步
8. 输入 data,表示开始传送数据,服务器返回354
9. 输入 subject:你的主题此处服务器无回显
10. 输入 此处什么也不用写,直接回车换行,作为主题与正文的分界此处服务器无回显
11. 输入 在这里写你的正文就可以了此处服务器也无回显
12. 输入 .对,就是一个英文句号,表示数据传送完毕,服务器返回250
13. 输入 quit服务器返回221,就安了,完成了,看看邮件收到了没.
整个过程入下图所示:

qt代码如下:
mailtest.pro
#-------------------------------------------------
#
# Project created by QtCreator 2019-07-08T10:30:13
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = mailtest
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp\
mainwindow.cpp \
smth.cpp
HEADERS += mainwindow.h \
smth.h
FORMS += mainwindow.ui
QT += network smtp.h
#ifndef SMTH_H
#define SMTH_H
#include<QByteArray>
#include<QString>
#include<QTcpSocket>
class Smtp
{
public:
Smtp(QByteArray username,QByteArray password);
~Smtp();
void send(QByteArray recvaddr,QString subject,QString content);
private:
QTcpSocket * clientsocket;
QByteArray username;
QByteArray password;
QByteArray recvaddr;
QByteArray mailfrom = "mail from:<";
QByteArray rcptto = "rcpt to:<";
QByteArray prefrom = "from:";
QByteArray preto = "to:";
QByteArray presubject ="subject:";
QString subject; //主题
QString content; //发送内容
QByteArray recvdata; //接收到的数据
};
#endif // SMTH_H smtp.cpp
#include "smth.h"
#include<qDebug>
Smtp::Smtp(QByteArray username,QByteArray password)
{
if(username.contains("@163"))
{
this->username = username;
this->password = password;
}
else
qDebug()<<"NOT 163";
}
void Smtp::send(QByteArray recvaddr,QString subject,QString content)
{
this->recvaddr = recvaddr;
this->subject = subject;
this->content = content;
QByteArray usernametmp = this->username;
QByteArray recvaddrtmp = this->recvaddr;
clientsocket=new QTcpSocket();
this->clientsocket->connectToHost("smtp.163.com",25,QTcpSocket::ReadWrite);
this->clientsocket->waitForConnected(1000);
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
this->clientsocket->write("HELO smtp.163.com\r\n");
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
this->clientsocket->write("AUTH LOGIN\r\n");
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
qDebug()<<"username:"<<username;
this->clientsocket->write(username.toBase64().append("\r\n"));
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
qDebug()<<"password:"<<password;
this->clientsocket->write(password.toBase64().append("\r\n"));
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
this->clientsocket->write(mailfrom.append(usernametmp.append(">\r\n")));
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
//发送邮箱
//qDebug()<<"mail from:"<<mailfrom.append(usernametmp.append(">\r\n"));
this->clientsocket->write(rcptto.append(recvaddrtmp.append(">\r\n")));
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
//接收邮箱
//qDebug()<<"rcp to:"<<rcptto.append(recvaddrtmp.append(">\r\n"));
//data表示开始传输数据
this->clientsocket->write("data\r\n");
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
usernametmp = this->username;
recvaddrtmp = this->recvaddr;
this->clientsocket->write(prefrom.append(usernametmp.append("\r\n")));
this->clientsocket->write(preto.append(recvaddrtmp.append("\r\n")));
this->clientsocket->write(presubject.append(subject.toLocal8Bit().append("\r\n")));
this->clientsocket->write("\r\n");
this->clientsocket->write(content.toLocal8Bit().append("\r\n"));
this->clientsocket->write(".\r\n");
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
this->clientsocket->write("quit\r\n");
this->clientsocket->waitForReadyRead(1000);
recvdata = clientsocket->readAll();
qDebug()<<recvdata;
}
Smtp::~Smtp()
{
delete this->clientsocket;
} main.cpp
#include "mainwindow.h"
#include <QApplication>
#include "smth.h"
int main(int argc, char *argv[])
{
Smtp smtp("feigenchen@163.com","xxxxxx"); //邮箱和密码都要用自己的
smtp.send("774367088@qq.com","测试smpt","这个是我写的代码给你发的邮件哈哈哈哈哈哈哈哈哈^_^");
return 0;
} 希望对各位有所帮助
参考网址:https://www.cnblogs.com/chunfeng0060/p/6135089.html
参考网址:https://blog.csdn.net/wangdeyu1994/article/details/78693427
Qt5基于smtp服务发送电子邮件的更多相关文章
- SMTP协议解读以及如何使用SMTP协议发送电子邮件
电子邮件协议中POP3协议用于接收邮件,SMTP协议用于发送邮件.SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议,字如其名. 相较于POP3而言 ...
- JavaMail使用SMTP协议发送电子邮件(详解)
Properties props = new Properties(); props.setProperty("mail.transport.protocol", "sm ...
- Django 使用第三方服务发送电子邮件
在 Django 网站中使用 mailgun 的邮件收发服务. 1.在 mailgun 官网上注册个账号(免费,免费账号每个月有10000条收发邮件的服务,对我来说已经完全够用了),注册完成后界面如图 ...
- Spring通过Gmail SMTP服务器MailSender发送电子邮件
Spring提供了一个有用的“org.springframework.mail.javamail.JavaMailSenderImpl”类,通过JavaMail API 简化邮件发送过程.这里有一个项 ...
- ASP.NET 发送电子邮件简介
1.补充知识 (1)POP3和SMTP服务器是什么? 简单点来说:POP3 用于接收电子邮件 ,SMTP 用于发送电子邮件. (1)POP3具体指什么? POP3(Post Office Protoc ...
- ASP.NET发送电子邮件(转)
原始地址:http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html(有代码下载,博主真是有操守) 1.补充知识 (1)POP ...
- C# ASP.NET发送电子邮件System.Net.Mail
1.补充知识 (1)POP3和SMTP服务器是什么? 简单点来说:POP3 用于接收电子邮件 ,SMTP 用于发送电子邮件. (1)POP3具体指什么? POP3(Post Office Protoc ...
- SSRS1:配置SMTP Server发送mail
为了使用SSRS发送mail,必须为Reporting service配置SMTP Server. 1,在Reporting Service Configuration Manager中配置Email ...
- python学习笔记(SMTP邮件发送)
想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认 ...
随机推荐
- python 批量编译 批量删除
把项目的py文件变异成pyc文件,好处是可以保护源码不泄露. 假如一个工程文件夹有1000个py文件,这个时候怎样快速处理 ? 两步走: ① py--->pyc python -m compi ...
- cookie不支持中文,必须转码后存储,否则会乱码
cookie不支持中文,必须转码后存储,否则会乱码 Cookie ck = new Cookie("username", URLEncoder.encode(name, " ...
- winform学习(2)窗体属性
窗体也属于控件(controls) 主窗体:在Main函数中创建的窗体,当关闭主窗体时,整个程序也就关闭了. 如何打开控件属性面板: ①在该控件上单击鼠标右键--属性. ②选中该控件,按F4 窗体常用 ...
- ABB 机器人 流水灯and跑马灯
MODULE MainModule VAR signaldi signaldi14; PROC main() //di14_test 数字输入信号 WHILE di14_test = DO ycld; ...
- 【转载】Spring MVC入门
转自:http://www.importnew.com/15141.html MVC框架是什么 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型.视图 ...
- 973. 最接近原点的 K 个点
1.暴力排序,新建节点类重载小于符号排序. class Solution { public: struct comb{ int index,distance; comb():index(0),dist ...
- Sql 中获取年月日时分秒的函数
getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...
- java的动态绑定和多态
public class Shape { public void area() { System.out.println("各种形状的面积..."); } public stati ...
- python实现获取电脑IP、主机名、Mac地址
import socket import uuid # 获取主机名 hostname = socket.gethostname() #获取IP ip = socket.gethostbyname(ho ...
- 04hive查询
详细文档查看:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 一. 基本查询(SELECT …FROM) ...