使用 javax.mail 发送邮件

mac2026-08-27  12

        发邮件在 java web 项目中是一个常用功能,之前在项目中刚好用到了邮件发送功能,现在用博客进行记录,方便以后查阅。这篇文章简单介绍使用 javax.mail 发送邮件的步骤,并提供封装好的邮件发送方法,希望对自己和别人有用。如有不妥的地方,也请大家指正。

1. 获取 javax.mail 相关 jar 包

1.1 下载 jar 包

https://www.oracle.com/technetwork/java/index-138643.html

1.2 如若使用 maven 管理 jar 包,则使用以下配置从仓库获取 jar 包

<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>

此处注意 jar 包版本,高版本的 jar 包中无 com.sun.mail 包,腾讯邮箱的设置需要用到此包中的类。

2. 配置邮件发送的相关节点

2.1 腾讯 qq 邮箱开启 POP3/SMTP 服务

         进入 qq 邮箱设置查找 POP3/SMTP 服务,按邮箱提示步骤开通即可。腾讯企业邮箱可忽略此步骤,不进行配置。

2.2 配置文件密码

        如上图所示,qq 邮箱设置独立密码,则配置文件中应配置该独立密码;腾讯企业邮箱中不存在独立密码,但是可开启安全登录,开启后会生成安全授权码,此时密码配置为该安全授权码。如果什么都没设置,密码即邮箱的登录密码。

2.3 配置文件

#邮件服务器 mail.host=smtp.exmail.qq.com #邮件发送协议 mail.transport.protocol=smtp #需要验证用户名密码 mail.smtp.auth=true #腾讯邮箱设置SSL加密 mail.smtp.ssl.enable=true #发件人邮箱 mail.user=******@foxmail.com #发件人邮箱密码 mail.password=******

2.4 封装邮件发送方法

    Java 代码:

import com.sun.mail.util.MailSSLSocketFactory; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.security.GeneralSecurityException; import java.util.Properties; /** * @Description TODO * @Author peiyu * @Date 2019/8/12 9:29 */ @Component public class EmailUtil { private static final Logger logger = LoggerFactory.getLogger(EmailUtil.class); @Value("${mail.host}") private String mailHost; @Value("${mail.user}") private String mailUser; @Value("${mail.password}") private String mailPassword; @Value("${mail.transport.protocol}") private String mailTransportProtocol; @Value("${mail.smtp.auth}") private String mailSmtpAuth; @Value("${mail.smtp.ssl.enable}") private String mailSmtpSslEnable; private Properties getEmailProperties() throws GeneralSecurityException { logger.info("EmailUtil.getEmailProperties() start!"); Properties prop; try { prop = new Properties(); // 设置邮件服务器 prop.setProperty("mail.host", mailHost); // 邮件发送协议 prop.setProperty("mail.transport.protocol", mailTransportProtocol); // 是否需要验证用户名密码 prop.setProperty("mail.smtp.auth", mailSmtpAuth); prop.put("mail.smtp.ssl.enable", mailSmtpSslEnable); // 关于腾讯邮箱,还要设置SSL加密,加上以下代码即可 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.socketFactory", sf); } catch (GeneralSecurityException e) { logger.error("EmailUtil.getEmailProperties() error!"); throw e; } logger.info("EmailUtil.getEmailProperties() end!"); return prop; } private Session getEmailSession(Properties prop) { logger.info("EmailUtil.getEmailSession() start!"); Session session = Session.getDefaultInstance(prop, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码 return new PasswordAuthentication(mailUser, mailPassword); } }); //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 session.setDebug(false); logger.info("EmailUtil.getEmailSession() end!"); return session; } /** * 发送邮件 * * @param subject 邮件主题 * @param content 邮件内容 * @param to 邮件接收人 * @param cc 邮件抄送人 * @return int(1:发送成功;-1:发送失败) */ public int sendEmail(String subject, String content, String to, String cc) { logger.info("EmailUtil.sendEmail() start!"); Transport ts; try { Properties prop = getEmailProperties(); if (null == prop) { return -1; } //使用JavaMail发送邮件的5个步骤 //1.创建定义整个应用程序所需的环境信息的 Session 对象 Session session = getEmailSession(prop); //2、通过session得到transport对象 ts = session.getTransport(); //3、使用邮箱的用户名和授权码连上邮件服务器 ts.connect(mailHost, mailUser, mailPassword); //4、创建邮件 //创建邮件对象 MimeMessage message = new MimeMessage(session); //指明邮件的发件人 message.setFrom(new InternetAddress(mailUser)); // 指明邮件的收件人 if (StringUtils.isNotBlank(to)) { message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); } else { logger.info("EmailUtil.sendEmail() Message.RecipientType.TO is null!"); return -1; } // 邮件抄送 if (StringUtils.isNotBlank(cc)) { message.setRecipient(Message.RecipientType.CC, new InternetAddress(cc)); } //邮件的标题 message.setSubject(subject); //邮件的文本内容 message.setContent(content); //5、发送邮件 ts.sendMessage(message, message.getAllRecipients()); ts.close(); } catch (MessagingException | GeneralSecurityException e) { logger.error("EmailUtil.sendEmail() error!", e); return -1; } logger.info("EmailUtil.sendEmail() end!"); return 1; } }

        通过以上步骤就可以进行邮件发送,快来试试吧!

最新回复(0)