Java中实现邮件发送需用jakarta.mail API配SMTP,配置服务器地址、端口、授权码,启用TLS/SSL,创建Session和Message,调用Transport.send();常见问题包括端口屏蔽、授权码错误及SSL验证失败。
Java中实现简单邮件发送功能,核心是使用JavaMail API配合SMTP协议,不需要复杂框架,几行代码就能发出测试邮件。
配置SMTP服务器和认证信息
发送邮件前需明确SMTP服务器地址、端口、账号和密码。常用邮箱如QQ邮箱、163邮箱都支持SMTP,但需在邮箱设置中开启“POP3/SMTP服务”,并获取专用授权码(不是登录密码)。
- QQ邮箱:SMTP服务器为 smtp.qq
.com,端口通常用 587(TLS)或 465(SSL)
- 163邮箱:SMTP服务器为 smtp.163.com,端口 465 或 994
- 务必使用授权码而非邮箱登录密码,否则会因安全策略被拒绝
添加JavaMail依赖
JavaMail已从Oracle移交至Eclipse Foundation,推荐使用 jakarta.mail(新版),Maven依赖如下:
jakarta.mail-api
jakarta.mail
编写发送逻辑(纯文本邮件)
创建Session对象时需配置SMTP参数和认证;Message对象设置发件人、收件人、主题和内容;Transport.send()完成投递。
- 启用TLS/SSL需设置 mail.smtp.starttls.enable=true 或 mail.smtp.ssl.enable=true
- 认证必须通过 Authenticator 子类提供用户名和密码
- 注意:收件人地址必须是合法邮箱格式,多个收件人可用 MimeMessage.addRecipient() 多次调用
常见问题与调试建议
发送失败大多源于配置或网络限制,可按顺序排查:
- 检查防火墙或公司网络是否屏蔽了SMTP端口(如465、587)
- 确认邮箱已开启SMTP服务且授权码正确(QQ/163后台可重新生成)
- 捕获 AuthenticationFailedException 和 SendFailedException 并打印详细堆栈
- 临时关闭SSL/TLS验证(仅测试):加配置 mail.smtp.ssl.checkserveridentity=false









