手把手教你用STM32发送带附件的邮件 (二、邮件功能实现)

  • 上节回顾

上一小节中我们使用正点原子的潘多拉开发板与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 按钮:

在弹出的软件包中心页面中搜索 SMTP ,搜索成功后点击 smtp_client 软件包的 添加 按钮,添加成功后关闭软件包中心页面。

此时回到 RT-Thread Settings 可以看到 smtp_client 软件包已经加入:

点击 smtp_client 进入详细配置页面,打开 smtp_client - smtp_client Options,打开 smtp client example 将默认的软件包例程加入到我们的工程中。选择完成后点击上方工具条的 保存 按钮。

保存成功后,软件包会自动下载并加入到工程中。

到这里,我们本章的工程文件都已经添加完毕,可惜的是,在目前的RT-Thread Studio版本中(1.1.1),每一次更新软件包或组件都会将我们自己添加的工程参数(头文件路径、库路径、链接文件等)清空,因此我们需要再配置一次,好在其不会删除我们存放于工程目录下的文件,因此本次配置我们仅需添加路径及库文件名即可,无需加入各种文件。

这里的配置步骤和第一章中的一样,具体有以下几点需要配置:

1. 将链接文件路径加入到 Cross ARM C Linker 下的 Script files (-T) 中:

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 )

3. 加入 rt_ota.h 头文件的路径:

配置完成后,我们点击编译。检测我们加入了SMTP后的工程能够编译成功:

若编译完成后如上图所示,则说明软件包加入成功并且可以正常编译,但这时候还不能下载程序,因为我们需要配置一些邮件的参数,好让我们能够正常接收到邮件。

打开 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邮箱为例:

修改后的宏定义类似如下图所示:

修改完宏定义后,我们还要修改收件人地址,在 smtp_thread 中 找到 smtp_add_receiver("66666@sharklasers.com"); 这一条代码,这一条代码作用是增加一个收件人,我们需要做的就是将参数中的 66666@sharklasers.com 修改为我们想要用于接收邮件的邮箱地址。若你没有两个邮箱,可以选择进入临时邮箱网站获取一个临时的邮箱:

继续看到 while(1) 中 有如下代码:

smtp_add_attachment("/a.txt", "a.txt");
smtp_add_attachment("/b.txt", "b.txt");

... //中间省略

smtp_clear_attachments();

前两行代码的作用是添加附件,后一行代码的作用是删除附件。这里添加了两个附件,但由于我们的工程还没有文件系统功能,因此是没有 a.txt 和 b.txt 文件的,所以我们将这三行注释掉。修改完后的代码如下所示:

接下来我们点击保存保存刚才所做的修改,点击编译,编译成功后下载。查看串口终端打出的信息,等待开发板获取IP地址后在终端中输入 smtp_test 命令:

开发板在执行命令后给我们回复了 send mail success! 提示,此时表示我们的邮件就已经发送成功了,由于我们的接收邮件是刚才在临时邮件网站获取的,所以我们回到临时邮件网站,找到收件箱,查看是否已经接收到邮件:

很明显已经接收到了我们刚才所发送的邮件,此时我们点击进入查看邮件内容:

可以看到我们的邮件内容也没有问题。结尾的 --smtp_client_boundary-- 是由于我们开启了附件功能但是没有添加任何附件导致的,后续版本会进行修复。当前版本(1.0.2)我们如果不想加入附件的话只需在 RT-Thread Settings 中去掉 enable attachment 选项后面的勾即可。

至此我们本章节目标就已达成。最后还想强调一点:

如果按照教程走下来依然无法收到邮件,一定要查看自己的发送邮箱是否开启了smtp功能,其次设置的密码是否为授权码,两个中有一个不对就无法发送邮件,所以请一定要确认:

是否开启了SMTP功能

是否输入了授权码而非密码,除非你使用的发送邮箱的SMTP登录密码就是邮箱的登录密码

 

本章结束

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WKJay_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值