发邮件在 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;
}
}
通过以上步骤就可以进行邮件发送,快来试试吧!
本文档详细介绍了在 Java Web 项目中如何使用 javax.mail 库发送邮件,包括获取 javax.mail 相关 jar 包的方法,腾讯 QQ 邮箱 POP3/SMTP 服务的开启步骤,以及邮件发送的配置和封装好的邮件发送方法。适用于需要在项目中实现邮件功能的开发者参考。

844

被折叠的 条评论
为什么被折叠?



