本人刚开始学习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发邮件的各种坑的更多相关文章

  1. python smtp 发邮件 添加附件

    # -*- coding:utf-8 -*- # __author__ = 'justing' import os import smtplib from email.mime.multipart i ...

  2. python SMTP发邮件

    # from email.mime.text import MIMEText from email.header import Header import smtplib # sender = 'zc ...

  3. nodeJS基于smtp发邮件

    邮件的协议smtp是tcp/ip族中的一个协议,所以我们这次考虑使用net模块来发送邮件. const net = require('net') const assert = require('ass ...

  4. SMTP 发邮件

    public class EmailOrderProcessor :IOrderProcessor { private EmailSettings es; public EmailOrderProce ...

  5. asp.net中模拟测试smtp发邮件

    最近在编程人生里要测试一个会员邮件的功能,就写了下面的代码. 在asp.net 中,有时要测试发信SMTP,但如果在单元测试中,如果没方便好用的 smtp怎么办,其实还是有办法模拟的,下面讲解下: 在 ...

  6. 【C#学习笔记】smtp发邮件

    using System; using System.Net; using System.Net.Mail; using System.Text; namespace ConsoleApplicati ...

  7. C#SMTP发邮件

    public static bool SendMailUse() { string host = "smtp.163.com";// 邮件服务器smtp.163.com表示网易邮箱 ...

  8. python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)

    SMTP发送邮件的时候,并没有特殊的通信语句告诉邮件服务器 谁是主送,谁是抄送/密送,这三个角色都是以同样的方式告诉邮件服务器的,然后重点在邮件内容里. 邮件内容分为头和体两部分(就像http),头部 ...

  9. SMTP发邮件(直接可用)实例

    string file = "邮件测试.txt";//放在Debug下的一个txt文件. MailAddress from = new MailAddress("自己的邮 ...

随机推荐

  1. 有趣、实用的c# 游戏源码下载网站

    在游戏开发的学习或工作中,利用完好的游戏源码可以事半功倍,不仅可以逆向学习开拓思维,也可以大大减少设计周期. 那想用c#来编写游戏的话,游戏源码在哪里找呢?下面整理了几个性价比高一些的网站,推荐给大家 ...

  2. BSGS && EXBSGS

    基础BSGS 用处是什么呢w 大步小步发(Baby-Step-Giant-Step,简称BSGS),可以用来高效求解形如\(A^x≡B(mod C)\)(C为素数)的同余方程. 常用于求解离散对数问题 ...

  3. Docker - dockerhub 相关命令

    1. 概述 水一发 docker 命令行里 dockerhub 相关的命令 2. 准备 有一个 dockerhub 的账号 ref dockerhub 3. 命令 登录 docker login 概述 ...

  4. oracle创建、删除索引等操作

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

  5. PHP中使用CURL实现Get和Post请求方法

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL的一些高级特性, ...

  6. 在线直播: .NET与物联网主流技术探秘 初识IoT!

    DNT精英论坛暨.NET北京俱乐部是由资深.NET专家和社区活跃分子发起的技术论坛,以“分享.成长.合作.共赢”为原则,致力于打造一个领先的技术分享平台和成长交流生态.本次活动由aelf赞助支持,刘洪 ...

  7. 6_15 给任务排序(UVa10305)<拓扑排序>

    John有n件事情要做,不幸的是这些事情并不是各自独立的,而是有相依性的.换句话说可能有某件事情一定要在另一件事情做完之后才能做.Input每组测试数据可能有好几列.第一列有2个整数n,m.(1 &l ...

  8. NTP服务安装及时间同步

    1.安装ntp服务命令 yum install -y ntp 2.常用NTP服务器地址: ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.al ...

  9. 微软停止支持Windows 7 数百万台电脑将面临病毒等风险

    导读 微软给出的公告称,从2020年开始停止支持Windows 7操作系统,这意味着该公司不会再向数百万台电脑发布任何软件更新,包括可以防止网络攻击的软件补丁. 微软给出的公告称,从2020年开始停止 ...

  10. JavaScript学习笔记之二

    一 js与json数据格式的转换:序列号与反序列化 JSON.stringify(jsobj, '  ');//将js的obj转换为json对象: JSON.parse()把json对象变成一个Jav ...