前言
由于价格监控项目的需求,实现了一个小的邮件发送接口服务,使用了一个单独的SpringBoot项目,给他取名为spring-mail-sender,开源在了Github上。内部我给他命名为提醒服务,因为未来希望还能扩展下,用来做短信发送服务,或者安卓等推送服务的API。
简介
本项目使用springboot,采用web api的方式提供邮件,短信等服务的调用接口,目前仅支持邮件提醒。
https://github.com/qqxx6661/spring-mail-sender
邮件提醒特点:
- 本地配置文件设置邮件账户密码和smtp
- 使用post来调用发送邮件请求,post中使用json数据填充:发件人昵称,收件人昵称,收件人邮箱,主题,正文。
- 调用接口返回状态码定义:(1=正常,2=错误,3=未登录,4=自定义错误(直接抛出errorMes))
- 发件人,收件人支持别名。
本项目待完成:
- 调用接口鉴权:防止无权限人员调用
- 调用接口频率限制:防止滥用接口
- 调用日志存储
项目结构如下:
1 | ├─main |
问题解决
发件人无法自定义别名
发现邮件发件人,也就是simpleMailMessage.setFrom
只能以用户的邮箱地址作为昵称,发件效果是这样的:
1 | { |
如果不一致,或者填写了用户别名,就会报如下错误:
我就很纳闷,因为之前我用python写了个发送邮件的api,明明是可以别名的啊,于是我打开了python的邮件api,看到如下代码,我将名称编码为了UTF-8:
1 | @staticmethod |
随后我又去谷歌了一阵,参考:
https://blog.csdn.net/yiifaa/article/details/78264962
原来想要使用发件人别名,就必须对发件字段进行编码:
严格格式为:别名<邮件地址>
然而,网上很多种答案要么引入了new InternetAddress(alias + " <"+from+">")
,要么编码为GBK,我最后还是直接编码为UTF-8:
1 | String fromByte = new String((emailRequest.getFrom() + " <" + fromAddress + ">") |
大功告成:
关注我
我目前是一名后端开发工程师。技术领域主要关注后端开发,数据爬虫,数据安全,5G,物联网等方向。
微信:yangzd1102
Github:@qqxx6661
个人博客:
原创博客主要内容
- Java知识点复习全手册
- Leetcode算法题解析
- 剑指offer算法题解析
- SpringCloud菜鸟入门实战系列
- SpringBoot菜鸟入门实战系列
- Python爬虫相关技术文章
- 后端开发相关技术文章
个人公众号:Rude3Knife
如果文章对你有帮助,不妨收藏起来并转发给您的朋友们~