上一篇                     
               
			  Java如何实现邮箱功能?
- 后端开发
- 2025-06-13
- 4743
 使用Java发送邮件主要依赖JavaMail API,核心步骤包括:配置SMTP服务器参数(主机/端口/认证)、创建Session会话、构建MIME消息体(设置发件人/收件人/主题/正文),最后通过Transport发送,需导入javax.mail相关依赖包,注意处理SSL加密等安全设置。
 
在Java中发送电子邮件主要依赖Jakarta Mail(原JavaMail API)实现,以下是详细步骤和完整代码示例,涵盖文本邮件、HTML邮件及附件发送:
准备工作
-  添加依赖(Maven项目): <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version> </dependency> 
-  获取SMTP服务:  - 使用QQ邮箱、163邮箱或企业邮箱(需开启SMTP服务)
- 以QQ邮箱为例:登录后进入“设置” → “账户” → 开启“POP3/SMTP服务”,获取授权码(非登录密码)。
 
发送文本邮件
import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.Properties;
public class EmailSender {
    public static void main(String[] args) {
        // 1. 配置SMTP服务器参数
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.qq.com"); // QQ邮箱SMTP服务器
        props.put("mail.smtp.port", "587");         // TLS端口
        props.put("mail.smtp.auth", "true");        // 需要认证
        props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
        // 2. 创建Session对象(传入邮箱账号和授权码)
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@qq.com", "your_auth_code");
            }
        });
        try {
            // 3. 构建邮件内容
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("your_email@qq.com")); // 发件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com")); // 收件人
            message.setSubject("Java邮件测试"); // 主题
            message.setText("这是一封通过Java发送的文本邮件。"); // 正文
            // 4. 发送邮件
            Transport.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
} 
发送HTML邮件与附件
// ...(Session配置同上,省略重复代码)
try {
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("your_email@qq.com"));
    message.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com"));
    message.setSubject("带附件的HTML邮件");
    // 创建多部分消息(正文+附件)
    Multipart multipart = new MimeMultipart();
    // 1. 添加HTML正文
    MimeBodyPart htmlPart = new MimeBodyPart();
    String htmlContent = "<h1 style='color:blue;'>Java邮件测试</h1><p>这是一封<strong>HTML格式</strong>的邮件!</p>";
    htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
    multipart.addBodyPart(htmlPart);
    // 2. 添加附件
    MimeBodyPart attachmentPart = new MimeBodyPart();
    attachmentPart.attachFile(new File("C:/test_document.pdf")); // 附件路径
    attachmentPart.setFileName("报告.pdf"); // 设置附件显示名称
    multipart.addBodyPart(attachmentPart);
    // 绑定内容到邮件
    message.setContent(multipart);
    Transport.send(message);
    System.out.println("HTML邮件发送成功!");
} catch (Exception e) {
    e.printStackTrace();
} 
关键配置说明
| 参数 | 示例值 | 作用 | 
|---|---|---|
| mail.smtp.host | smtp.qq.com | QQ邮箱SMTP服务器地址 | 
| mail.smtp.port | 587或465 | TLS端口(587) / SSL端口(465) | 
| mail.smtp.auth | true | 必须开启认证 | 
| mail.smtp.starttls.enable | true | 启用TLS加密传输 | 
常见问题解决
-  认证失败: - 检查邮箱账号和授权码(非登录密码)
- 开启SMTP服务(如QQ邮箱需生成授权码)
 
-  连接超时:  props.put("mail.smtp.connectiontimeout", "5000"); // 5秒连接超时 props.put("mail.smtp.timeout", "10000"); // 10秒操作超时
-  端口被屏蔽: - 尝试切换端口:587(TLS) 或465(SSL)
- 企业邮箱需联系管理员确认端口
 
- 尝试切换端口:
安全建议
- 避免硬编码密码: 将授权码存储在环境变量或加密配置文件中  
- 强制加密: 
  - 始终启用mail.smtp.starttls.enable=true或mail.smtp.ssl.enable=true
 
- 始终启用
- 验证证书(生产环境): props.put("mail.smtp.ssl.checkserveridentity", true); // 验证服务器证书
引用说明
- Jakarta Mail官方文档:Eclipse Jakarta Mail Project
- QQ邮箱SMTP设置指南:帮助中心
- JavaMail API历史迁移说明:Oracle移交公告
本文代码基于Jakarta Mail 2.0.1编写,适用于JDK 8+,实际使用时请替换邮箱账号、授权码及SMTP服务器地址,企业邮箱配置请参考服务商提供的文档。
 
  
			