Hutool - 结合163邮箱发送邮件
使用Hutool结合163邮箱发送邮件
进入163设置邮箱POP3/SMTP/IMAP
引入Hutool依赖
地址:https://www.hutool.cn/docs/#/extra/%E9%82%AE%E4%BB%B6%E5%B7%A5%E5%85%B7-MailUtil<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version> </dependency> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-extre</artifactId><version>5.0.6</version> </dependency>
创建配置文件,该文件并非只能叫mail.setting,通过查看源码可以看到配置文件名称和路径配置,这里不讲述,放到最后来描述。
# 邮件服务器的SMTP地址,可选,默认为smtp.<发件人邮箱后缀> host=smtp.163.com # 邮件服务器的SMTP端口,默认是25端口 port=25 # 发件人(必须正确,否则发送失败) from=*******@163.com # 用户名,必须要设置成你自己使用邮箱的名称,否则会报错,权限认证失败 535错误 user=******@163.com # 密码 此处注意,这里是授权码 pass=**** # 使用SSL安全连接 sslEnable=false #使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 starttlsEnable = false auth = true
设置maven添加文件扫描,如果不添加有可能会造成target目录下找不到.setting文件
<resources><resource><directory>src/main/java</directory><includes><include>**/*.yml</include><include>**/*.properties</include><include>**/*.xml</include><include>**/*.setting</include><include>**/*.png</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.yml</include><include>**/*.properties</include><include>**/*.xml</include><!-- 加入.setting --><include>**/*.setting</include><include>**/*.png</include></includes><filtering>false</filtering></resource></resources>
开始写java代码
public void sendEmail() {ArrayList<String> tos = CollUtil.newArrayList("****@163.com","****@qq.com");MailUtil.send(tos, "测试邮件", "邮件来自Zyred问候沙雕的邮件, 晚上好!", false);}
测试结果
部分源码阅读
进入send() 后
// 进入send() MailUtil.send(tos, "测试邮件", "邮件来自Zyred问候沙雕的邮件, 晚上好!", false);
/*** 使用配置文件中设置的账户发送邮件,发送给多人** @param tos 收件人列表* @param subject 标题* @param content 正文* @param isHtml 是否为HTML* @param files 附件列表*/public static void send(Collection<String> tos, String subject, String content, boolean isHtml, File... files) {send(tos, null, null, subject, content, isHtml, files);}/*** 使用配置文件中设置的账户发送邮件,发送给多人** @param tos 收件人列表* @param ccs 抄送人列表,可以为null或空* @param bccs 密送人列表,可以为null或空* @param subject 标题* @param content 正文* @param isHtml 是否为HTML* @param files 附件列表* @since 4.0.3*/public static void send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {send(GlobalMailAccount.INSTANCE.getAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files);}
此时你会发现第第一个send()调用了第二个send(),第二个send()中第一个参数好像就是账户对象,果断点进去看看,Ctrl + 鼠标右键,点击INSTANCE,进入该类中,代码如下
package cn.hutool.extra.mail;import cn.hutool.core.io.IORuntimeException;/*** 全局邮件帐户,依赖于邮件配置文件{@link MailAccount#MAIL_SETTING_PATH}或{@link MailAccount#MAIL_SETTING_PATH2}* * @author looly**/ public enum GlobalMailAccount {INSTANCE;private final MailAccount mailAccount;/*** 构造*/GlobalMailAccount() {mailAccount = createDefaultAccount();}/*** 获得邮件帐户* * @return 邮件帐户*/public MailAccount getAccount() {return this.mailAccount;}/*** 创建默认帐户* * @return MailAccount*/private MailAccount createDefaultAccount() {MailAccount mailAccount = null;try {mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH);} catch (IORuntimeException e) {//ignore}// 寻找config/mailAccount.settingif(null == mailAccount) {try {mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH2);} catch (IORuntimeException e) {//ignore}}// 寻找mail.settingif(null == mailAccount) {try {mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH3);} catch (IORuntimeException e) {//ignore}}return mailAccount;} }
注意看createDefaultAccount()方法中,是如何创建MailAccount对象的,我们再看看try中 new MailAccount(MailAccount.MAIL_SETTING_PATH); MailAccount.MAIL_SETTING_PATH代表了什么?
public static final String MAIL_SETTING_PATH = "config/mail.setting"; public static final String MAIL_SETTING_PATH2 = "config/mailAccount.setting"; public static final String MAIL_SETTING_PATH3 = "mail.setting";
此时此刻浮现在眼前的是三个不同的路径,然后我们再回到 GlobalMailAccount#createDefaultAccount(),
private MailAccount createDefaultAccount() {MailAccount mailAccount = null;try {// 读取 config/mail.settingmailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH);} catch (IORuntimeException e) {//ignore}// 寻找config/mailAccount.settingif(null == mailAccount) {try {mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH2);} catch (IORuntimeException e) {//ignore}}// 寻找classpath下的 mail.settingif(null == mailAccount) {try {mailAccount = new MailAccount(MailAccount.MAIL_SETTING_PATH3);} catch (IORuntimeException e) {//ignore}}return mailAccount;}
现在明白了吗?
菜鸟的记录,有错误请多多指教,相互学习,谢谢!!
Hutool - 结合163邮箱发送邮件相关推荐
- thinkPHP3.2.3使用163邮箱发送邮件
thinkPHP3.2.3使用163邮箱发送邮件 (一) 前言 第一次写博客,主要就是为了分享一下自己敲代码的一些心得并整理一下自己的知识以便以后查看. 我原来一直在找通过thinkPHP使用QQ邮 ...
- java模拟网易邮箱登录_java实现163邮箱发送邮件到qq邮箱成功案例
下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相 ...
- 利用163 邮箱发送邮件
1.利用163邮箱发送邮件 # _*_ coding:UTF-8 import time import smtplib from email.mime.text import MIMEText fro ...
- python 发送邮件 163_python练习-使用163邮箱发送邮件
具体代码如下> #密码等敏感信息已经用****替换 import smtplib,sys from email.mime.text import MIMEText from email.head ...
- java 给qq邮箱发邮件_java实现163邮箱发送邮件到qq邮箱成功案例
这篇文章主要为大家分享了java实现163邮箱发送邮件到qq邮箱成功案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 下载和上传附件.发送短信和发送邮件,都算是程序中 ...
- 163邮箱java通用下载_java_java实现163邮箱发送邮件到qq邮箱成功案例,下载和上传附件、发送短信和 - phpStudy...
java实现163邮箱发送邮件到qq邮箱成功案例 下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现 ...
- QT5 使用163邮箱发送邮件
最近在用QT写一点东西,想发送个邮件.查了一些资料,发现没有官方的库,好多前辈都是推荐使用sendemailapi,但是这个网站现在已经不提供下载了,在网上也没有找到可以免费下载的这个库的地方. 借鉴 ...
- php怎么做一个163邮箱发送,laravel5.4利用163邮箱发送邮件的步骤详解
前言 其实发送邮箱其实不难,不如说挺简单的,本文将详细介绍关于laravel5.4用163邮箱发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.首先还是现在16 ...
- app里使用163邮箱发送邮件,被163认为是垃圾邮件的坑爹经历!_ !
最近有个项目,要发邮件给用户设定的邮箱报警,然后就用了163邮箱,代码是网上借来的^^,如下: package com.smartdoorbell.util;import android.os.Asy ...
最新文章
- 池化方法总结(Pooling)
- 《Java程序设计》实验报告——Java的接口与继承
- 跟着别人的感觉做网络推广之二
- 唐山师范学院计算机论文,唐山师范学院校园网络解决方案 毕业论文
- php文件怎么制定编码格式,php文件编码格式对结果有影响
- xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...
- 嵌入式linux内核开启键盘,- 基于嵌入式Linux内核的特殊矩阵键盘设计完整驱动控制模块方案...
- Axure RP 8 for Mac(交互式原型设计工具)汉化版
- 【2017】听懂你能看懂的句子
- 基于卷积神经网络的人脸表情识别综述
- python遗传算法工具箱的使用_Python遗传算法框架——Geatpy学习笔记(一)
- JS中将json字符串转为json对象的三种方式
- 什么是免备案虚拟主机?阿里云国际版云服务器给你答案
- gogo/protobuf proto.GoGoProtoPackageIsVersion2、proto3 版本 不一致
- cursor android,Android Cursor用法
- Matplotlib:Legend 图例
- 估算的合同总价与实际的合同总价
- Linux/Android之perf追内存泄漏工具(api级别)(一百)
- Hash表_拉链法_开放寻址法_模拟散列表
- 《脚本》Python在线百度文库爬虫(免下载券)