1. 项目概述
邮件发送功能是现代软件开发中不可或缺的基础能力,无论是用户注册验证、密码找回、通知提醒还是营销推广,邮件服务都扮演着重要角色。作为Java开发者,我们经常需要在项目中集成邮件发送功能。而IntelliJ IDEA作为最强大的Java IDE,提供了完善的工具链支持我们高效完成这一任务。
本文将带你从零开始,在IntelliJ IDEA中完整实现邮件发送功能。不同于简单的代码片段展示,我会重点分享实际项目中的经验技巧,包括如何选择合适的邮件协议、处理常见异常、优化发送性能等实战干货。无论你是需要快速实现一个简单的邮件通知功能,还是构建企业级邮件服务,这篇文章都能给你提供实用参考。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 开发环境搭建
首先确保你的开发环境已经准备就绪。我推荐使用以下组合:
- IntelliJ IDEA 2023.x 及以上版本(社区版或旗舰版均可)
- JDK 17(LTS版本,长期支持)
- Maven 3.8+ 或 Gradle 7.x(本文以Maven为例)
在IDEA中新建一个Maven项目,选择"Create from archetype"并选择"maven-archetype-quickstart"。项目创建完成后,我们需要添加邮件发送的核心依赖。
2.2 依赖配置
在pom.xml中添加JavaMail API和Apache Commons Email的依赖:
xml复制<dependencies>
<!-- JavaMail API -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<!-- Apache Commons Email简化操作 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
<!-- 日志框架 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
提示:在实际项目中,建议将依赖版本提取到
标签中统一管理,方便后续升级。
2.3 邮件服务器配置
在开始编码前,我们需要准备邮件服务器配置。常见的有三种方案:
-
使用第三方SMTP服务(推荐开发使用):
- 网易邮箱:smtp.163.com
- QQ邮箱:smtp.qq.com
- Gmail:smtp.gmail.com
-
自建邮件服务器:
- Postfix
- Sendmail
- Exchange Server
-
本地测试服务器:
- GreenMail(嵌入式邮件服务器,适合单元测试)
以163邮箱为例,我们需要先在邮箱设置中开启SMTP服务并获取授权码(不是邮箱密码!)。具体路径:设置→POP3/SMTP/IMAP→开启SMTP服务→获取授权码。
3. 基础邮件发送实现
3.1 使用JavaMail API发送简单邮件
让我们从最基本的文本邮件开始。创建一个MailSender工具类:
java复制import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class BasicMailSender {
private static final String SMTP_HOST = "smtp.163.com";
private static final String SMTP_PORT = "465";
private static final String USERNAME = "your_email@163.com";
private static final String PASSWORD = "your_authorization_code"; // 授权码,非登录密码
public static void sendTextEmail(String to, String subject, String content) throws MessagingException {
// 1. 配置参数
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST);
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true"); // 使用SSL
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
// 2. 创建Session
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
// 3. 创建并配置Message
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(USERNAME));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setText(content);
