Qt5.5 使用smtp发邮件的各种坑
本人刚开始学习C++,用的是Qt5.5的IED,经过了两天的学习和查找资料,终于成功发了第一封邮件。以163邮箱为例,简单总结一下。
1、设置邮箱
这一步比较关键,要开通smtp服务,在开通的过程中会让你输入一个邮箱客户端授权码,这个才是你后面要用到的密码,而不是你登陆邮箱的密码;

2、找代码
也许你会问我,为什么不自己写呢?还是不太懂smtp,先看看别人的怎么写。
先了解了一下邮件是怎么被发出去的。
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加密的你的账户名,比如你的qq号是123456,就去百度下 base64加密,然后找个地方将你的q号加密,copy到命令行回车返回334,下一步是输入经过base64加密过的你的密码
5. 输入 你的base64加密过的密码,方法同上,然后服务器返回235,表示验证通过,可以进行下一步了.
6. 输入 mail from:<****@qq.com> 这里写你的qq邮箱,服务器返回250.
7. 输入 rcpt to:<****@qq.com> 这里写你要发送给的qq邮箱,貌似其他邮箱不可以,服务器返回250,下一步
8. 输入 data,表示开始传送数据,服务器返回354
9. 输入 subject:你的主题此处服务器无回显
10. 输入 此处什么也不用写,直接回车换行,作为主题与正文的分界此处服务器无回显
11. 输入 在这里写你的正文就可以了此处服务器也无回显
12. 输入 .对,就是一个英文句号,表示数据传送完毕,服务器返回250
13. 输入 quit服务器返回221,就安了,完成了,看看邮件收到了没.
3、如果你发成功了,就可以考虑如何用代码实现这个发邮件的过程。
网上找了一个比较靠谱的发邮件的工具类,可以拿来用,叫 sendemailapi (http://messyink.cn/download/sendemailapi.zip)。
当然有些代码还是需要写的~
//实例化发送邮件对象
SmtpClient smtp("smtp.163.com", , SmtpClient::TcpConnection);
smtp.setUser("******@163.com");
smtp.setPassword("******"); //构建邮件主题,包含发件人收件人附件等.
MimeMessage message;
message.setSender(new EmailAddress("******@163.com")); //逐个添加收件人
message.addRecipient(new EmailAddress("******@163.com")); //构建邮件标题
message.setSubject(QStringLiteral("系统检测")); //构建邮件正文
MimeText text;
text.setText(QStringLiteral("测试简单文本发送!")); message.addPart(&text); if (!smtp.connectToHost()){
qDebug() << QStringLiteral("服务器连接失败!");
}
if (!smtp.login()){
qDebug() << QStringLiteral("用户登录失败!");
}
if (!smtp.sendMail(message)){
qDebug() << QStringLiteral("邮件发送失败!");
}else{
qDebug() << QStringLiteral("邮件发送成功!");
}
smtp.quit();
4、到了这一步,确实是把邮件发出来了。但是一看邮件顿时惊呆了。竟然全都是乱码,最后通过朋友的帮助,在所有的汉字上加上了QStringLiteral(),结果才算好了。
参考:
http://blog.csdn.net/etwdone/article/details/52995496
http://www.qtcn.org/bbs/read-htm-tid-56050.html
Qt5.5 使用smtp发邮件的各种坑的更多相关文章
- python smtp 发邮件 添加附件
# -*- coding:utf-8 -*- # __author__ = 'justing' import os import smtplib from email.mime.multipart i ...
- python SMTP发邮件
# from email.mime.text import MIMEText from email.header import Header import smtplib # sender = 'zc ...
- nodeJS基于smtp发邮件
邮件的协议smtp是tcp/ip族中的一个协议,所以我们这次考虑使用net模块来发送邮件. const net = require('net') const assert = require('ass ...
- SMTP 发邮件
public class EmailOrderProcessor :IOrderProcessor { private EmailSettings es; public EmailOrderProce ...
- asp.net中模拟测试smtp发邮件
最近在编程人生里要测试一个会员邮件的功能,就写了下面的代码. 在asp.net 中,有时要测试发信SMTP,但如果在单元测试中,如果没方便好用的 smtp怎么办,其实还是有办法模拟的,下面讲解下: 在 ...
- 【C#学习笔记】smtp发邮件
using System; using System.Net; using System.Net.Mail; using System.Text; namespace ConsoleApplicati ...
- C#SMTP发邮件
public static bool SendMailUse() { string host = "smtp.163.com";// 邮件服务器smtp.163.com表示网易邮箱 ...
- python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)
SMTP发送邮件的时候,并没有特殊的通信语句告诉邮件服务器 谁是主送,谁是抄送/密送,这三个角色都是以同样的方式告诉邮件服务器的,然后重点在邮件内容里. 邮件内容分为头和体两部分(就像http),头部 ...
- SMTP发邮件(直接可用)实例
string file = "邮件测试.txt";//放在Debug下的一个txt文件. MailAddress from = new MailAddress("自己的邮 ...
随机推荐
- 洛谷P1130红牌(简单DP)
题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括NNN个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都 ...
- 【Vue路由系统详述】
目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"# ...
- Angular NgModule(模块)
NgModule 模块是Angular种一个重要的点,因为Angular的基本构造块就是NgModule.NgModule 会把相关的代码收集到一些功能集中,形成功能单元.在使用Angular CL ...
- ora 01704 字符串文字太长
分析sql执行失败的原因,在于没有强制指定插入字符串为clob类型,解析sql时,oracle会把插入的字符串作为 “字符串类型”处理,由于oracle有最大字符串限制(不超过4000个字符),所以会 ...
- ZOJ - 3203 Light Bulb(三分)
题意:灯离地面的高度为$H$,人的身高为$h$,灯离墙的距离为$D$,人站在不同位置,影子的长度不一样,求出影子的最长长度. 思路:设人离灯的距离为$x$,当人走到距离灯长度为$L$时,人在墙上的影子 ...
- Java面向对象的局部变量和成员变量
package cn.itcast.day06.demo03; /* 局部变量和成员变量 1. 定义的位置不一样[重点] 局部变量:在方法的内部,类的方法内部 成员变量:在方法的外部,直接写在类当中 ...
- Redis的安装和启动(一)
一.Redis的安装 获取redis的安装包 ①如果能上网,选择以下命令:wget http://download.redis.io/releases/redis-3.2.11.tar.gz ②如果不 ...
- SEO 建站过程复盘
今天在A5看到一篇关于一个牛站的复盘,整个建站过程值得借鉴. https://www.admin5.com/article/20200218/943930.shtml
- python正则表达式中括号的作用,形如 "(\w+)\s+\w+"
先看一个例子: import re string="abcdefg acbdgef abcdgfe cadbgfe" #带括号与不带括号的区别 regex=re.compile(& ...
- Dapr Pub/Sub 集成 RabbitMQ 、Golang、Java、DotNet Core
前置条件: <Dapr运用> <Dapr 运用之 Java gRPC 调用篇> <Dapr 运用之集成 Asp.Net Core Grpc 调用篇> 搭建 Rabb ...