本人刚开始学习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. 无显示器安装raspberry zero w树莓派 zero w

    笔者的环境 1. Macbook 电脑用于烧录树莓派系统到SD卡 2. 树莓派 zero w 把SD卡放进读卡器,插到Mac电脑上, 打开命令行工具Terminal diskutil list列出di ...

  2. linux shell date的用法

    该随笔引用自https://www.cnblogs.com/alsodzy/p/8403870.html 在 linux shell 里面date命令的参数 %% 一个文字的 % %a 当前local ...

  3. PHP实现敏感词过滤

    1.敏感词过滤方法 /** * @todo 敏感词过滤,返回结果 * @param array $list 定义敏感词一维数组 * @param string $string 要过滤的内容 * @re ...

  4. UVA 10881 Piotr's Ants(模拟)

    题目链接:https://vjudge.net/problem/UVA-10881 其实这道题的关键只有一句话: 当两个蚂蚁因碰撞而掉头的时候,我们完全可以认为是两个点对穿而过. 这时候我们的主要任务 ...

  5. 安卓基础(Navigation)

    今天学习了简单的Navigation:页面导航. 页面导航的简单例子: MainAcitivity: package com.example.navigation; import android.su ...

  6. JVM系列(四)之GC调优

    JVM内存参数调优 为什么要GC调优? 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但当你的系统时常报了内存溢出或者 ...

  7. 关于this和base的区别

    一句话总结:在有冲突得时候,base和this能够进行区分,在没有冲突得时候,是一样得. 基于成员调用 基于构造方法 参考: http://www.cnblogs.com/reommmm/archiv ...

  8. RedisTemplate 获取过期时间的问题

    RedisTemplate redisTemplate; Long seconds = redisTemplate.opsForValue().getOperations().getExpire(&q ...

  9. 5种JVM调优配置方法概览!!!

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  10. JNJP节点指定端口

    jenkins节点机通过jnjp的方式访问jenkins服务器,端口号默认是随机分配,断开再连接则端口号会变. 由于公司管控较严,服务器开放的端口需要申请,因此不希望是随机分配的,而是可以指定端口. ...