前言
因爲價格監控項目的需求,實現了一個小的郵件發送接口服務,使用了一個單獨的SpringBoot項目,給他取名爲spring-mail-sender,開源在了Github上。內部我給他命名爲提醒服務,由於將來但願還能擴展下,用來作短信發送服務,或者安卓等推送服務的API。javascript
簡介
本項目使用springboot,採用web api的方式提供郵件,短信等服務的調用接口,目前僅支持郵件提醒。css
https://github.com/qqxx6661/spring-mail-senderjava
郵件提醒特色:python
本地配置文件設置郵件帳戶密碼和smtpgit
使用post來調用發送郵件請求,post中使用json數據填充:發件人暱稱,收件人暱稱,收件人郵箱,主題,正文。github
調用接口返回狀態碼定義:(1=正常,2=錯誤,3=未登陸,4=自定義錯誤(直接拋出errorMes))web
發件人,收件人支持別名。算法
本項目待完成:spring
x調用接口鑑權:防止無權限人員調用json
x調用接口頻率限制:防止濫用接口
x調用日誌存儲
項目結構以下:
├─main
│ ├─java
│ │ └─com
│ │ └─demo
│ │ └─springmailsender
│ │ │ SpringMailSenderApplication.java
│ │ │ SwaggerConfig.java
│ │ │
│ │ ├─domain
│ │ │ EmailRequest.java
│ │ │ ResponseData.java
│ │ │
│ │ ├─service
│ │ │ EmailService.java
│ │ │ EmailServiceImpl.java
│ │ │
│ │ └─web
│ │ EmailController.java
│ │
│ └─resources
│ application.properties
│
└─test
└─java
└─com
└─demo
└─springmailsender
SpringMailSenderApplicationTests.java
問題解決
發件人沒法自定義別名
發現郵件發件人,也就是simpleMailMessage.setFrom
只能以用戶的郵箱地址做爲暱稱,發件效果是這樣的:
{
"address": "xxxxx@qq.com",
"from": "2897788509@qq.com", // 必須和發件郵箱徹底一致
"msg": "string",
"subject": "string",
"to": "xxxxxxx@qq.com"
}
我就很納悶,由於以前我用python寫了個發送郵件的api,明明是能夠別名的啊,因而我打開了python的郵件api,看到以下代碼,我將名稱編碼爲了UTF-8:
@staticmethod
def _format_addr(s):
# format the email address
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
隨後我又去谷歌了一陣,參考:
https://blog.csdn.net/yiifaa/article/details/78264962
原來想要使用發件人別名,就必須對發件字段進行編碼:
嚴格格式爲:別名<郵件地址>
然而,網上不少種答案要麼引入了new InternetAddress(alias + " <"+from+">")
,要麼編碼爲GBK,我最後仍是直接編碼爲UTF-8:
String fromByte = new String((emailRequest.getFrom() + " <" + fromAddress + ">")
.getBytes("UTF-8"));
String toByte = new String((emailRequest.getTo() + " <" + emailRequest.getAddress() + ">")
.getBytes("UTF-8"));
simpleMailMessage.setFrom(fromByte);
simpleMailMessage.setTo(toByte);
simpleMailMessage.setSubject(emailRequest.getSubject());
simpleMailMessage.setText(emailRequest.getMsg());
大功告成:
關注我
我目前是一名後端開發工程師。技術領域主要關注後端開發,數據爬蟲,數據安全,5G,物聯網等方向。
微信:yangzd1102
Github:@qqxx6661
我的博客:
CSDN:@qqxx6661
知乎:@Zhendong
簡書:@蠻三刀把刀
掘金:@蠻三刀把刀
原創博客主要內容
Java知識點複習全手冊
Leetcode算法題解析
劍指offer算法題解析
SpringCloud菜鳥入門實戰系列
SpringBoot菜鳥入門實戰系列
Python爬蟲相關技術文章
後端開發相關技術文章
我的公衆號:Rude3Knife
若是文章對你有幫助,不妨收藏起來並轉發給您的朋友們~
本文分享自微信公衆號 - 後端技術漫談(Rude3Knife)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。