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