在Java中实现简单邮件发送功能_Java基础网络项目解析

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,端口 465994
  • 务必使用授权码而非邮箱登录密码,否则会因安全策略被拒绝

添加JavaMail依赖

JavaMail已从Oracle移交至Eclipse Foundation,推荐使用 jakarta.mail(新版),Maven依赖如下:


  jakarta.mail
  jakarta.mail-api
  2.1.3


  com.sun.mail
  jakarta.mail
  2.1.3

编写发送逻辑(纯文本邮件)

创建Session对象时需配置SMTP参数和认证;Message对象设置发件人、收件人、主题和内容;Transport.send()完成投递。

  • 启用TLS/SSL需设置 mail.smtp.starttls.enable=truemail.smtp.ssl.enable=true
  • 认证必须通过 Authenticator 子类提供用户名和密码
  • 注意:收件人地址必须是合法邮箱格式,多个收件人可用 MimeMessage.addRecipient() 多次调用

常见问题与调试建议

发送失败大多源于配置或网络限制,可按顺序排查:

  • 检查防火墙或公司网络是否屏蔽了SMTP端口(如465、587)
  • 确认邮箱已开启SMTP服务且授权码正确(QQ/163后台可重新生成)
  • 捕获 AuthenticationFailedExceptionSendFailedException 并打印详细堆栈
  • 临时关闭SSL/TLS验证(仅测试):加配置 mail.smtp.ssl.checkserveridentity=false