EmailUtil
类封装了发送邮件的功能,提供了三种不同的邮件发送方法,支持发送纯文本或 HTML 格式的邮件,并且可以选择是否添加附件。它借助 Spring 框架的 JavaMailSenderImpl
类来完成邮件的发送操作。
一、SendMail 方法
1.初始化邮件发送器:创建 JavaMailSenderImpl 实例,设置邮件默认编码、邮件服务器地址、端口、发件人邮箱地址、密码、协议。
2.配置邮件属性:创建 Properties 对象,设置连接超时、SMTP 操作超时、写入超时、SMTP 认证、TLS 加密等属性,并将其设置到 JavaMailSenderImpl 中。
3.创建邮件消息:创建 MimeMessage 实例和 MimeMessageHelper 实例,设置发件人、收件人、主题、正文。
4.发送邮件:调用 JavaMailSenderImpl 的 send 方法发送邮件。
public class EmailUtil {
// 连接超时时间,单位为毫秒
private int connectionTimeout = 5000;
// SMTP 操作超时时间,单位为毫秒
private int smtpTimeout = 3000;
// 写入超时时间,单位为毫秒
private int writeTimeout = 10000;
// 是否启用 TLS 加密
private boolean ttlsEnable = true;
// 是否要求必须使用 TLS 加密
private boolean ttlsRequired = true;
// 是否需要进行 SMTP 认证
private boolean smtpAuth = true;
/**
* 发送邮件的方法,不包含附件
* @param stmpServer 邮件服务器地址
* @param stmpPort 邮件服务器端口
* @param fromEmail 发件人邮箱地址
* @param fromNickname 发件人昵称
* @param fromPass 发件人邮箱密码或授权码
* @param toEmail 收件人邮箱地址
* @param emailSubject 邮件主题
* @param emailBody 邮件正文
* @return 发送成功返回 true,失败返回 false
*/
public boolean SendMail(String stmpServer, int stmpPort, String fromEmail, String fromNickname, String fromPass, String toEmail, String emailSubject, String emailBody) {
boolean flag = false;
try {
// 创建 JavaMailSenderImpl 实例,用于发送邮件
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
// 设置邮件默认编码为 UTF-8
javaMailSender.setDefaultEncoding("utf-8");
// 设置邮件服务器地址
javaMailSender.setHost(stmpServer);
// 设置邮件服务器端口
javaMailSender.setPort(stmpPort);
// 设置发件人邮箱地址
javaMailSender.setUsername(fromEmail);
// 设置发件人邮箱密码或授权码
javaMailSender.setPassword(fromPass);
// 设置邮件发送协议为 smtps
javaMailSender.setProtocol("smtps");
// 创建 Properties 对象,用于配置邮件发送的相关属性
Properties properties = new Properties();
// 设置连接超时时间
properties.put("mail.smtp.connectiontimeout", connectionTimeout);
// 设置 SMTP 操作超时时间
properties.put("mail.smtp.timeout", smtpTimeout);
// 设置写入超时时间
properties.put("mail.smtp.writetimeout", writeTimeout);
// 设置是否需要进行 SMTP 认证
properties.put("mail.smtp.auth", smtpAuth);
// 设置是否启用 TLS 加密
properties.put("mail.smtp.starttls.enable", ttlsEnable);
// 设置是否要求必须使用 TLS 加密
properties.put("mail.smtp.starttls.required", ttlsRequired);
// 将配置属性设置到 JavaMailSenderImpl 中
javaMailSender.setJavaMailProperties(properties);
// 创建 MimeMessage 实例,用于表示邮件消息
MimeMessage message = javaMailSender.createMimeMessage();
// 创建 MimeMessageHelper 实例,用于辅助构建邮件消息
MimeMessageHelper helper = new MimeMessageHelper(message, false);
// 设置发件人邮箱地址和昵称
helper.setFrom(fromEmail, fromNickname);
// 设置收件人邮箱地址
helper.setTo(toEmail);
// 设置邮件主题
helper.setSubject(emailSubject);
// 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
helper.setText(emailBody, true);
// 调用 JavaMailSenderImpl 的 send 方法发送邮件
javaMailSender.send(message);
// 若发送成功,将标志位设置为 true
flag = true;
} catch (Exception ex) {
// 若发送失败,将标志位设置为 false
flag = false;
// 打印异常堆栈信息
ex.printStackTrace();
}
return flag;
}
}
二、SendEMail
方法(无附件)
该方法与 SendMail
方法的操作步骤基本一致,只是可以通过参数指定邮件正文是否为 HTML 格式。
public class EmailUtil {
// 连接超时时间,单位为毫秒
private int connectionTimeout = 5000;
// SMTP 操作超时时间,单位为毫秒
private int smtpTimeout = 3000;
// 写入超时时间,单位为毫秒
private int writeTimeout = 10000;
// 是否启用 TLS 加密
private boolean ttlsEnable = true;
// 是否要求必须使用 TLS 加密
private boolean ttlsRequired = true;
// 是否需要进行 SMTP 认证
private boolean smtpAuth = true;
/**
* 发送邮件的方法,不包含附件,可指定正文是否为 HTML 格式
* @param smtpServer 邮件服务器地址
* @param smtpPort 邮件服务器端口
* @param fromEmail 发件人邮箱地址
* @param fromPass 发件人邮箱密码或授权码
* @param nickName 发件人昵称
* @param toEmail 收件人邮箱地址
* @param subject 邮件主题
* @param content 邮件正文
* @param isHtml 邮件正文是否为 HTML 格式
* @return 发送成功返回 true,失败返回 false
*/
public boolean SendEMail(String smtpServer, int smtpPort, String fromEmail, String fromPass, String nickName, String toEmail, String subject, String content, boolean isHtml) {
boolean result = false;
try {
// 创建 JavaMailSenderImpl 实例,用于发送邮件
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
// 设置邮件默认编码为 UTF-8
javaMailSender.setDefaultEncoding("utf-8");
// 设置邮件服务器地址
javaMailSender.setHost(smtpServer);
// 设置邮件服务器端口
javaMailSender.setPort(smtpPort);
// 设置发件人邮箱地址
javaMailSender.setUsername(fromEmail);
// 设置发件人邮箱密码或授权码
javaMailSender.setPassword(fromPass);
// 设置邮件发送协议为 smtps
javaMailSender.setProtocol("smtps");
// 创建 Properties 对象,用于配置邮件发送的相关属性
Properties properties = new Properties();
// 设置连接超时时间
properties.put("mail.smtp.connectiontimeout", connectionTimeout);
// 设置 SMTP 操作超时时间
properties.put("mail.smtp.timeout", smtpTimeout);
// 设置写入超时时间
properties.put("mail.smtp.writetimeout", writeTimeout);
// 设置是否需要进行 SMTP 认证
properties.put("mail.smtp.auth", smtpAuth);
// 设置是否启用 TLS 加密
properties.put("mail.smtp.starttls.enable", ttlsEnable);
// 设置是否要求必须使用 TLS 加密
properties.put("mail.smtp.starttls.required", ttlsRequired);
// 将配置属性设置到 JavaMailSenderImpl 中
javaMailSender.setJavaMailProperties(properties);
// 创建 MimeMessage 实例,用于表示邮件消息
MimeMessage message = javaMailSender.createMimeMessage();
// 创建 MimeMessageHelper 实例,用于辅助构建邮件消息
MimeMessageHelper helper = new MimeMessageHelper(message, false);
// 设置发件人邮箱地址和昵称
helper.setFrom(fromEmail, nickName);
// 设置收件人邮箱地址
helper.setTo(toEmail);
// 设置邮件主题
helper.setSubject(subject);
// 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
helper.setText(content, isHtml);
// 调用 JavaMailSenderImpl 的 send 方法发送邮件
javaMailSender.send(message);
// 若发送成功,将标志位设置为 true
result = true;
} catch (Exception ex) {
// 若发送失败,将标志位设置为 false
result = false;
}
return result;
}
}
三、SendEMail 方法(有附件)
1.初始化邮件发送器和配置属性:与前面两个方法相同。
2.创建邮件消息:创建 MimeMessage 实例和 MimeMessageHelper 实例,设置发件人、收件人、主题、正文。
3.添加附件:遍历附件列表,将每个附件的文件名和文件路径获取出来,创建 FileSystemResource 实例,然后使用 MimeMessageHelper 的 addAttachment 方法将附件添加到邮件中。
4.发送邮件:调用 JavaMailSenderImpl 的 send 方法发送邮件。
public class EmailUtil {
// 连接超时时间,单位为毫秒
private int connectionTimeout = 5000;
// SMTP 操作超时时间,单位为毫秒
private int smtpTimeout = 3000;
// 写入超时时间,单位为毫秒
private int writeTimeout = 10000;
// 是否启用 TLS 加密
private boolean ttlsEnable = true;
// 是否要求必须使用 TLS 加密
private boolean ttlsRequired = true;
// 是否需要进行 SMTP 认证
private boolean smtpAuth = true;
/**
* 发送邮件的方法,包含附件
* @param smtpServer 邮件服务器地址
* @param smtpPort 邮件服务器端口
* @param fromEmail 发件人邮箱地址
* @param fromPass 发件人邮箱密码或授权码
* @param nickName 发件人昵称
* @param toEmail 收件人邮箱地址
* @param subject 邮件主题
* @param content 邮件正文
* @param isHtml 邮件正文是否为 HTML 格式
* @param attachments 附件列表
* @return 发送成功返回 true,失败返回 false
*/
public boolean SendEMail(String smtpServer, int smtpPort, String fromEmail, String fromPass, String nickName, String toEmail, String subject, String content, boolean isHtml, List<Attachment> attachments) {
boolean flag = false;
try {
// 创建 JavaMailSenderImpl 实例,用于发送邮件
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
// 设置邮件默认编码为 UTF-8
javaMailSender.setDefaultEncoding("utf-8");
// 设置邮件服务器地址
javaMailSender.setHost(smtpServer);
// 设置邮件服务器端口
javaMailSender.setPort(smtpPort);
// 设置发件人邮箱地址
javaMailSender.setUsername(fromEmail);
// 设置发件人邮箱密码或授权码
javaMailSender.setPassword(fromPass);
// 设置邮件发送协议为 smtps
javaMailSender.setProtocol("smtps");
// 创建 Properties 对象,用于配置邮件发送的相关属性
Properties properties = new Properties();
// 设置连接超时时间
properties.put("mail.smtp.connectiontimeout", 5000);
// 设置 SMTP 操作超时时间
properties.put("mail.smtp.timeout", 3000);
// 设置写入超时时间
properties.put("mail.smtp.writetimeout", "5000");
// 设置是否需要进行 SMTP 认证
properties.put("mail.smtp.auth", true);
// 设置是否启用 TLS 加密
properties.put("mail.smtp.starttls.enable", true);
// 设置是否要求必须使用 TLS 加密
properties.put("mail.smtp.starttls.required", true);
// 将配置属性设置到 JavaMailSenderImpl 中
javaMailSender.setJavaMailProperties(properties);
// 创建 MimeMessage 实例,用于表示邮件消息
MimeMessage message = javaMailSender.createMimeMessage();
// 创建 MimeMessageHelper 实例,用于辅助构建邮件消息,第二个参数 true 表示支持附件
MimeMessageHelper helper = new MimeMessageHelper(message, true);
// 设置发件人邮箱地址和昵称
helper.setFrom(fromEmail, nickName);
// 设置收件人邮箱地址
helper.setTo(toEmail);
// 设置邮件主题
helper.setSubject(subject);
// 设置邮件正文,第二个参数表示是否是 HTML 格式的正文
helper.setText(content, isHtml);
// 遍历附件列表,将附件添加到邮件中
for (Attachment attachment : attachments) {
// 获取附件文件名
String fileName = attachment.getFileName();
// 获取附件文件路径
String filePath = attachment.getFilePath();
// 创建 FileSystemResource 实例,用于表示附件文件
FileSystemResource file = new FileSystemResource(filePath);
// 将附件添加到邮件中
helper.addAttachment(fileName, file);
// 打印夹带附件的信息
Printer.Print("夹带附件:"+filePath);
}
// 调用 JavaMailSenderImpl 的 send 方法发送邮件
javaMailSender.send(message);
// 若发送成功,将标志位设置为 true
flag = true;
} catch (Exception e) {
// 若发送失败,将标志位设置为 false
flag = false;
}
return flag;
}
}
通过以上内容便可轻轻松松发邮件.是不是超级简单.有任何问题欢迎留言哦!!!
重点!重点!重点!
遇到问题不用怕不如来我的知识库找找看,也许有意想不到的收获!!!
易网时代-易库资源-易库教程:.NET开发、Java开发、PHP开发、SqlServer技术、MySQL技术-开发资料大全-易网时代-易库资源-易库教程 (escdns.com)