在很多管理系统中,向指定邮箱发送邮件是比较常见的功能。比如登录注册可以用邮箱进行验证;运维系统中,自动给运维人员发送告警邮件;企业内部系统中,审批事项的邮件提醒等场景。以下实现了java语言中,发送邮件的功能。
一、准备工作
-
确保使用的邮箱已开启SMTP服务(通常在邮箱设置中开启)
本文以qq邮箱为例,进入邮箱首页,找到账号。

-
找到
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务并开启服务如果服务已经开启可以点击管理服务,进入管理界面。

-
生成授权码
在管理界面
安全设置中,生成授权码,授权码将会配置在程序中使用。
注意:授权码不是登录密码
二、使用javax.mail
JavaMail是Sun公司推出的Java 中用于处理电子邮件的编程接口,属于独立发布的API。它提供了发送、接收和读取电子邮件的功能。
- 常见邮箱服务器配置
- QQ邮箱
String host = "smtp.qq.com";
String port = "465"; // 或 "587"
- 163邮箱
String host = "smtp.163.com";
String port = "465"; // 或 "587"
- Gmail
String host = "smtp.gmail.com";
String port = "465";
// 注意:Gmail需要开启"低安全性应用访问"
- Outlook
String host = "smtp.office365.com";
String port = "587";
- 添加依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
-
发送HTML格式邮件
要发送HTML格式的邮件,修改邮件创建部分:
// 创建HTML格式邮件 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); // 设置HTML内容 String htmlContent = "<h1>HTML格式邮件</h1>" + "<p>这是一封<strong>HTML格式</strong>的测试邮件</p>" + "<p>发送时间: " + new java.util.Date() + "</p>" + "<p><a href='https://www.example.com'>访问示例网站</a></p>"; message.setContent(htmlContent, "text/html; charset=utf-8"); -
发送带附件的邮件
// 创建多部分消息 Multipart multipart = new MimeMultipart(); // 添加文本部分 MimeBodyPart textPart = new MimeBodyPart(); textPart.setText(body); multipart.addBodyPart(textPart); // 添加附件 MimeBodyPart attachmentPart = new MimeBodyPart(); String filePath = "path/to/your/file.pdf"; DataSource source = new FileDataSource(filePath); attachmentPart.setDataHandler(new DataHandler(source)); attachmentPart.setFileName("附件.pdf"); multipart.addBodyPart(attachmentPart); // 设置消息内容 message.setContent(multipart); -
异常处理
程序可能抛出以下异常:
AuthenticationFailedException:认证失败,检查邮箱和授权码MessagingException:邮件发送过程中的其他错误AddressException:邮箱地址格式错误
建议在实际应用中加入完善的异常处理机制。
-
完整示例(带HTML和附件)
public static void main(String[] args) { // 配置邮件服务器信息 String host = "smtp.qq.com"; // SMTP服务器地址 String port = "465"; // SMTP端口 String username = "your_email@qq.com"; // 发件人邮箱 String password = "your_authorization_code"; // 邮箱授权码(不是登录密码) // 邮件内容 String to = "receive_email@qq.com"; // 收件人邮箱 String subject = "Java邮件发送测试"; // 邮件主题 // HTML格式邮件正文 String body = "<html><body>" + "<h1 style='color:blue'>Java邮件测试</h1>" + "<p>这是一封包含<strong>HTML格式</strong>和<em>附件</em>的测试邮件</p>" + "<p>发送时间: " + new java.util.Date() + "</p>" + "</body></html>"; // 附件路径 String attachmentPath = "example.pdf"; // 发送邮件 try { sendEmail(host, port, username, password, to, subject, body, attachmentPath); System.out.println("邮件发送成功!"); } catch (MessagingException e) { System.err.println("邮件发送失败: " + e.getMessage()); e.printStackTrace(); } } /** * 发送电子邮件 * * @param host SMTP服务器地址 * @param port SMTP端口 * @param username 发件人邮箱 * @param password 邮箱授权码 * @param to 收件人邮箱 * @param subject 邮件主题 * @param body 邮件正文 * @param attachmentPath 附件路径 * @throws MessagingException 邮件发送异常 */ public static void sendEmail(String host, String port, String username, String password, String to, String subject, String body, String attachmentPath) throws MessagingException { // 1. 配置邮件服务器属性 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); // 启用认证 props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密 props.put("mail.smtp.host", host); // SMTP服务器地址 props.put("mail.smtp.port", port); // SMTP端口 // 对于使用SSL的邮箱(如QQ邮箱) if ("465".equals(port)) { props.put("mail.smtp.socketFactory.port", port); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); } // 2. 创建Session会话 Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); // 3. 创建邮件消息 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); // 设置发件人 message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); // 设置收件人 message.setSubject(subject); // 设置邮件主题 // message.setText(body); // 设置邮件正文 // 创建多部分内容 Multipart multipart = new MimeMultipart(); // HTML正文部分 MimeBodyPart htmlPart = new MimeBodyPart(); htmlPart.setContent(body, "text/html; charset=utf-8"); multipart.addBodyPart(htmlPart); // 附件部分 if (attachmentPath != null && !attachmentPath.isEmpty()) { MimeBodyPart attachmentPart = new MimeBodyPart(); DataSource source = new FileDataSource(attachmentPath); attachmentPart.setDataHandler(new DataHandler(source)); attachmentPart.setFileName(source.getName()); multipart.addBodyPart(attachmentPart); } // 设置消息内容 message.setContent(multipart); // 4. 发送邮件 Transport.send(message); } -
登录收件人邮箱查看结果

-
配置参数说明
| 参数 | 说明 | 示例值 |
|---|---|---|
host | SMTP服务器地址 | smtp.qq.com (QQ邮箱) |
port | SMTP端口 | 465 (SSL加密) 或 587 (TLS加密) |
username | 发件人邮箱 | your_email@qq.com |
password | 邮箱授权码 | 在邮箱设置中生成的授权码 |
to | 收件人邮箱 | recipient@example.com |
subject | 邮件主题 | Java邮件发送测试 |
body | 邮件正文 | 邮件内容文本 |
二、使用hutool工具包
Hutool是一个强大的Java工具包类库,封装了大量的Util工具类,使用hutool工具包,可以让我们用更少的代码,很轻松地实现邮件发送功能。
使用Hutool中的邮件发送功能,需要依赖于javax.mail包,Hutool对javax.mail包进行工具类化封装,使其变得更加简单,易于使用。
- 添加依赖
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.24</version>
</dependency>
- 测试代码
public static void main(String[] args) {
// HTML格式邮件正文
String htmlBody = "<html><body>"
+ "<h1 style='color:blue'>Java邮件测试</h1>"
+ "<p>这是一封包含<strong>HTML格式</strong>的测试邮件</p>"
+ "<p>发送时间: " + new java.util.Date() + "</p>"
+ "</body></html>";
// 使用Hutool发送邮件
MailAccount account = new MailAccount();
account.setHost("smtp.qq.com");
account.setPort(465);
account.setUser("your_email@qq.com");
account.setPass("your_authorization_code");
account.setFrom("your_email@qq.com");
account.setSslEnable(true);
String send = MailUtil.send(account, "receive_email@qq.com", "Java邮件测试", htmlBody, true, null);
System.out.println("sendEMail result ========" + send);
}
- 执行结果

250是SMTP(简单邮件传输协议) 中的状态码,表示**“请求的邮件操作已就绪”或“操作成功完成”**
常见问题解决
- 认证失败
- 确保使用授权码而不是邮箱登录密码
- 检查是否已开启邮箱的SMTP服务
- 对于Gmail,需要开启"低安全性应用访问"
- 连接超时
- 检查网络连接是否正常
- 尝试更换端口(465或587)
- 检查防火墙设置
- 附件大小限制
- 大多数邮箱服务商有附件大小限制(通常25MB)
- 大文件建议使用云存储服务
- 邮件被标记为垃圾邮件
- 避免使用敏感词汇
- 添加合适的邮件主题
- 避免发送过多相似内容
1078

被折叠的 条评论
为什么被折叠?



