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", 25, 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

 

posted @ 2016-12-06 09:16  chunfeng0060  阅读(5852)  评论(0编辑  收藏  举报