Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
IoT_Board
RT-Thread Studio
邮件应用
手把手教你用STM32发送带附件的邮件 (二)
1.00
发布于 2020-07-04 13:35:13 浏览:1021
订阅该版
[tocm] ## 上节回顾 上一小节中我们使用正点原子的潘多拉开发板与RT-Thread 的 IoT Board SDK,并使用 RT-Thred Studio 成功运行了wifi例程,涉及到以下几个知识点: 1. 如何使用 RT-Thread Studio 导入MDK工程。 2. 如何配置 RT-Thread Studio 的工程参数(头文件、库文件、链接文件)。 3. 如何使用 RT-Thread Studio 创建一个原生的 RT-Thread Studio 工程。 4. 如何使用 RT-Thread Studio 编译及下载程序。 希望大家对以上知识点有一个比较深刻的认识,因为在本节以及下一节中也会使用到相关的知识点。 ## 本节目标 本章节会在上一节的基础上实现不带附件的邮件发送功能,涉及到软件包的添加以及相关的设置,同时也会用到上一节的配置工程参数的知识,如果对上一节的内容还不是很熟悉,建议再回到上一节仔细研究研究。 ## 添加软件包 要完全靠自己实现邮件功能,需要掌握邮件传输的协议:SMTP。当然整个互联网有数不胜数的协议,我们不能用一个协议就去从头到尾去学习这个协议,这样协议还没学完,项目就黄了。因此我们要学会使用现成的工具,这样我们就能直接上手使用这个功能。(当然如果要完善工具或开发原工具不支持的功能,就需要自己去研究及探索)好在RT-Thread软件包中已经有了SMTP的实现,我们只需要添加对应的邮件实现软件包:**smtp_client** 即可使用邮件功能。接下来我们就在我们的工程中添加这个软件包。 首先点击工程目录下的 **RT-Thread Settings** ,打开配置界面,并点击软件包下的 **Add** 按钮: ![image.png](/uploads/20200704/93a070be3c8311e1c41eccaa6f695663.png) 在弹出的软件包中心页面中搜索 **SMTP** ,搜索成功后点击 **smtp_client** 软件包的 **添加** 按钮,添加成功后关闭软件包中心页面。 ![image.png](/uploads/20200704/6d67b7daf6dde7de9d570f23d03a7cf4.png) 此时回到 **RT-Thread Settings** 可以看到 **smtp_client** 软件包已经加入: ![image.png](/uploads/20200704/b7f9f9cbb470d0d78ca7d41e941031ed.png) 点击 **smtp_client** 进入详细配置页面,打开 **smtp_client - smtp_client Options**,打开 **smtp client example** 将默认的软件包例程加入到我们的工程中。选择完成后点击上方工具条的 保存 按钮。 ![image.png](/uploads/20200704/ef39e748e5f2f4310b827241f49a3fe9.png) 保存成功后,软件包会自动下载并加入到工程中。 ![image.png](/uploads/20200704/3008d4a3b17e6734609cd64d6bec840c.png) 到这里,我们本章的工程文件都已经添加完毕,可惜的是,在目前的RT-Thread Studio版本中(1.1.1),每一次更新软件包或组件都会将我们自己添加的工程参数(头文件路径、库路径、链接文件等)清空,因此我们需要再配置一次,好在其不会删除我们存放于工程目录下的文件,因此本次配置我们仅需添加路径及库文件名即可,无需加入各种文件。 这里的配置步骤和第一章中的一样,具体有以下几点需要配置: 1. 将链接文件路径加入到 **Cross ARM C Linker** 下的 **Script files (-T)** 中: ![image.png](/uploads/20200704/401a94485bfdec366a11de4c695fad93.png) 2. 将 **librt_ota_noalgo_0.1.2_stm32l4_gcc.a** 以及 **libwifi_6181_0.2.5_armcm4_gcc.a** 两个库以及其路径加入到 **Cross ARM C Linker - Libraries** 的库文件配置中 **(在Libraries (-I) 配置中输入的库文件名字要去掉库文件名前面的lib和结尾的.a ):** ![image.png](/uploads/20200704/e9ed2504688e76abaf69d9d279357bbb.png) 3. 加入 **rt_ota.h** 头文件的路径: ![image.png](/uploads/20200704/e3fae93f8f020470896fa4a41eb48047.png) 配置完成后,我们点击编译。检测我们加入了SMTP后的工程能否编译成功: ![image.png](/uploads/20200704/b81642053e2e079376b51571c10148b8.png) 若编译完成后如上图所示,则说明软件包加入成功并且可以正常编译,但这时候还不能下载程序,因为我们需要配置一些邮件的参数,好让我们能够正常接收到邮件。 打开 **smtp_client_example.c** 源文件,如果这时候出现乱码,说明文件编码与软件默认编码不同,此时点击上方导航栏的编辑 - 设置编码 ,将编码设置为 **UTF-8** 即可。 进入 **smtp_client_example.c** 文件后,我们需要修改 开头的几个宏定义: 1. **SMTP_SERVER_ADDR** : 这个对应你的邮箱服务器域名,比如163邮箱的为“smtp.163.com”,qq邮箱的为“smtp.qq.com”。 2. **SMTP_SERVER_PORT** : 所要连接的服务器端口号,默认为25属于非加密端口,其次还有465和587端口,后面两者都是加密端口,用到了mbedtls软件包,如果要使用后面两个端口,需要在 **smtp_client** 软件包配置中打开 **use 465/587 port** 选项,RT-Thread Studio 会自动加入所依赖的软件包,使用者无需做任何更改就可直接使用加密端口,但是由于涉及到数据加密,因此会占用较大的内存,本项目中我们只用25端口即可。 3. **SMTP_USERNAME** : 邮箱账号,这个账号是发件人的邮箱账号,一般情况下就对应邮箱地址。 4. **SMTP_PASSWORD** : 邮箱授权码,这个授权码有点特殊,因为他不同于你登录邮箱的密码,是邮件服务器专门提供给外部客户端登录邮箱服务器所用的密码。该密码可能等同于登录邮箱的密码,但大多数情况下是独立的一个密码(比如QQ邮箱则称之为授权码),这个密码会在用户开启邮箱的SMTP服务后提供给用户。**(你必须开启邮箱的SMTP服务后才能使用SMTP功能,一般会在邮箱的设置中开启)** 以QQ邮箱为例: ![image.png](/uploads/20200704/6359d04855c4420a718fc5f0a9c1f388.png) 修改后的宏定义类似如下图所示: ![image.png](/uploads/20200704/eb8c4ac2536fb1b7ee25c1897628748d.png) 修改完宏定义后,我们还要修改收件人地址,在 `smtp_thread` 中 找到 `smtp_add_receiver("66666@sharklasers.com");` 这一条代码,这一条代码作用是增加一个收件人,我们需要做的就是将参数中的 `66666@sharklasers.com` 修改为我们想要用于接收邮件的邮箱地址。若你没有两个邮箱,可以选择进入临时邮箱网站获取一个临时的邮箱: ![image.png](/uploads/20200704/75ba8e4bbaa60697a8239150039b5162.png) 继续看到 `while(1)` 中 有如下代码: ```C smtp_add_attachment("/a.txt", "a.txt"); smtp_add_attachment("/b.txt", "b.txt"); ... //中间省略 smtp_clear_attachments(); ``` 前两行代码的作用是添加附件,后一行代码的作用是删除附件。这里添加了两个附件,但由于我们的工程还没有文件系统功能,因此是没有 `a.txt` 和 `b.txt` 文件的,所以我们将这三行注释掉。修改完后的代码如下所示: ![image.png](/uploads/20200704/6571af5b31830a584945137dee4748bf.png) 接下来我们点击保存保存刚才所做的修改,点击编译,编译成功后下载。查看串口终端打出的信息,等待开发板获取IP地址后在终端中输入 `smtp_test` 命令: ![image.png](/uploads/20200704/f0751c6e9cf542c9b121075817ef42b4.png) 开发板在执行命令后给我们回复了 **send mail success!** 提示,此时表示我们的邮件就已经发送成功了,由于我们的接收邮件是刚才在临时邮件网站获取的,所以我们回到临时邮件网站,找到收件箱,查看是否已经接收到邮件: ![image.png](/uploads/20200704/81a218b4fa7d2c2650da170a2016d6c1.png) 很明显已经接收到了我们刚才所发送的邮件,此时我们点击进入查看邮件内容: ![image.png](/uploads/20200704/816f6282e3807b3089163cf8af0b73a2.png) 可以看到我们的邮件内容也没有问题。结尾的 --smtp_client_boundary-- 是由于我们开启了附件功能但是没有添加任何附件导致的,后续版本会进行修复。当前版本(1.0.2)我们如果不想加入附件的话只需在 RT-Thread Settings 中去掉 **enable attachment** 选项后面的勾即可。 至此我们本章节目标就已达成。最后还想强调一点: 如果按照教程走下来依然无法收到邮件,一定要查看自己的发送邮箱是否开启了smtp功能,其次设置的密码是否为授权码,两个中有一个不对就无法发送邮件,所以请一定要确认: **_是否开启了SMTP功能_** **_是否输入了授权码而非密码,除非你使用的发送邮箱的SMTP登录密码就是邮箱的登录密码_** 本章结束
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
WKJay
wkjay.com
文章
10
回答
135
被采纳
24
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部