Java邮箱发送服务
一、邮箱开启SMTP服务
这里使用QQ邮箱为示例,其他邮箱大同小异
-
登录QQ邮箱; (https://mail.qq.com/)
-
登录成功后点击“设置”;
-
导航栏选择“账户”,下滑找到“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务”开启“SMTP”服务;
-
点击开启按钮,经过短信验证后开启服务;
-
短信发送后,点击我已发送,验证成功后会有一个弹出框,有一个“授权码”需要将其记下来。
二、测试邮件发送
pom依赖
<!-- hutool -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.10</version>
</dependency>
<!-- javax.mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
package com.zxy.demo.mail;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import java.io.File;
/**
* @description: study
* 模块名称:
* 说明: 邮箱发送
* 作者(@author): zxy
* 创建日期: 2022年1月9日14:10:55
*/
public class MailSend {
public static void main(String[] args) {
MailAccount account = new MailAccount();
//SMTP服务器域名
account.setHost("smtp.qq.com");
//SMTP服务端口
account.setPort(25);
//是否需要用户名密码验证
account.setAuth(true);
//发送方,遵循RFC-822标准
account.setFrom("xxxxx@qq.com");
//用户名
account.setUser("xxxxx@qq.com");
//密码,可以是邮箱密码,也可以授权码
account.setPass("xxxxx");
/**
* 参数说明
* @param mailAccount 邮件认证对象
* @param to 收件人,多个收件人逗号或者分号隔开,也可以是列表
* MailUtil.send(account, CollUtil.newArrayList(""), "标题", "正文", false, new File(""));
* @param subject 标题
* @param content 正文
* @param isHtml 是否为HTML格式
* @param files 附件列表(没有可不传)。
*/
try {
MailUtil.send(account, "xxxxx@qq.com", "标题", "正文", false, new File(""));
} catch (Exception e) {
System.out.println("发送失败,错误信息:" + e);
e.printStackTrace();
}
}
}
三、注意事项
- 发送html格式的邮件,html样式可能不会适配所有邮箱,主流163,gmail邮箱是适配的,qq邮箱如果样式是在head中写着,则不会适配,需要写在行内标签style中才会生效。
- 抛出“连接不到SMTP服务器,端口25”异常,先从配置查起,配置如果确定无误,则查看是不是被杀毒软件干掉了(本地),如果在云服务器中运行,比如阿里云,腾讯云等,需要去控制台解封25端口,注意:不是安全组端口25放行,而是解封。可以看这篇文章(https://www.fwqbk.com/tencent/95.html)