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("自己的邮 ...
随机推荐
- 有趣、实用的c# 游戏源码下载网站
在游戏开发的学习或工作中,利用完好的游戏源码可以事半功倍,不仅可以逆向学习开拓思维,也可以大大减少设计周期. 那想用c#来编写游戏的话,游戏源码在哪里找呢?下面整理了几个性价比高一些的网站,推荐给大家 ...
- BSGS && EXBSGS
基础BSGS 用处是什么呢w 大步小步发(Baby-Step-Giant-Step,简称BSGS),可以用来高效求解形如\(A^x≡B(mod C)\)(C为素数)的同余方程. 常用于求解离散对数问题 ...
- Docker - dockerhub 相关命令
1. 概述 水一发 docker 命令行里 dockerhub 相关的命令 2. 准备 有一个 dockerhub 的账号 ref dockerhub 3. 命令 登录 docker login 概述 ...
- oracle创建、删除索引等操作
1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...
- PHP中使用CURL实现Get和Post请求方法
1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL的一些高级特性, ...
- 在线直播: .NET与物联网主流技术探秘 初识IoT!
DNT精英论坛暨.NET北京俱乐部是由资深.NET专家和社区活跃分子发起的技术论坛,以“分享.成长.合作.共赢”为原则,致力于打造一个领先的技术分享平台和成长交流生态.本次活动由aelf赞助支持,刘洪 ...
- 6_15 给任务排序(UVa10305)<拓扑排序>
John有n件事情要做,不幸的是这些事情并不是各自独立的,而是有相依性的.换句话说可能有某件事情一定要在另一件事情做完之后才能做.Input每组测试数据可能有好几列.第一列有2个整数n,m.(1 &l ...
- NTP服务安装及时间同步
1.安装ntp服务命令 yum install -y ntp 2.常用NTP服务器地址: ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.al ...
- 微软停止支持Windows 7 数百万台电脑将面临病毒等风险
导读 微软给出的公告称,从2020年开始停止支持Windows 7操作系统,这意味着该公司不会再向数百万台电脑发布任何软件更新,包括可以防止网络攻击的软件补丁. 微软给出的公告称,从2020年开始停止 ...
- JavaScript学习笔记之二
一 js与json数据格式的转换:序列号与反序列化 JSON.stringify(jsobj, ' ');//将js的obj转换为json对象: JSON.parse()把json对象变成一个Jav ...