发送邮件,把发送邮件的配置信息放到mysql表中的方式
1.email邮件配置信息建表脚本
DROP TABLE IF EXISTS `email_config`;
CREATE TABLE `email_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(100) not null COMMENT '发件人邮箱地址',
`user_name` varchar(20) not null COMMENT '用户名',
`passwored` varchar(20) not null COMMENT '密码',
`smtp_host` varchar(100) not null COMMENT '发件服务器主机名',
`smtp_port` varchar(20) not null COMMENT '端口号,端口25, SSL,加密端口465',
`ssl_enable` tinyint(1) DEFAULT '0' COMMENT '是否使用ssl安全连接',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `address` (`address`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='邮件配置';

2.发送邮件的工具类
/**
* 发送邮件
*
* @author
*
*/
@Component
@Slf4j
public class EmailUtils {
@Autowired
private EmailConfigMapper emailConfigMapper;
/**
* 发送邮件
*
* @param toEmail
* @param subject
* @param content
* @return
*/
@SuppressWarnings("rawtypes")
public BaseResponse sendEmail(String toEmail, String subject, String content) {
BaseResponse response = new BaseResponse(StatusCode.Success);
if (StringUtils.isBlank(toEmail)) {
return response;
}
if (StringUtils.isEmpty(subject)) {
subject = StringUtils.EMPTY;
}
if (StringUtils.isEmpty(content)) {
content = StringUtils.EMPTY;
}
// 将文本换行符,改成html
content = content.replace("\n", "<br/>");
EmailConfig emailConfig = emailConfigMapper.selectEmailConfig();
if (emailConfig == null) {
return new BaseResponse(StatusCode.Fail.getStatus(), "没有进行邮件服务设置");
}
try {
this.sendEmail(emailConfig, toEmail, subject, content);
response = new BaseResponse(StatusCode.EmailSendSuccess);
} catch (Exception e) {
response = new BaseResponse(StatusCode.EmailSendFail);
log.error(response.getmessage() + e.getMessage());
}
return response;
}
/**
* 发送邮件
*
* @param emailConfig
* 邮件配置
* @param toEmail
* 邮件接收地址
* @param subject
* 主题
* @param content
* 内容
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public void sendEmail(EmailConfig emailConfig, String toEmail, String subject, String content)
throws UnsupportedEncodingException, MessagingException {
// 发件人用户名
String userName = emailConfig.getUserName();
// 发件服务器主机名
String smtpHost = emailConfig.getSmtpHost();
// SMTP服务器地址:smtp.mxhichina.com 端口25, SSL加密端口465
String smtpPort = emailConfig.getSmtpPort();
// 发件人邮箱地址
String address = emailConfig.getAddress();
// 密码
String smtpPassword = emailConfig.getPasswored();
// 是否使用ssl安全连接
Boolean sslEnable = emailConfig.getSslEnable();
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");// 连接协议
properties.put("mail.smtp.host", smtpHost); // 主机名
properties.put("mail.smtp.port", smtpPort); // 端口号
properties.put("mail.smtp.auth", "true"); // 是否进行身份验证 (默认false)
properties.put("mail.smtp.ssl.enable", sslEnable.toString()); // 设置是否使用ssl安全连接(若服务器未配置则false,否则会报错)
// 设置是否显示debug信息 true,会在控制台显示相关信息
properties.put("mail.debug", "true");
// 得到会话对象
Session session = Session.getInstance(properties);
// 获取邮件对象
Message message = new MimeMessage(session);
InternetAddress formAddress = new InternetAddress(address, userName);
// 设置发件人邮箱地址
message.setFrom(formAddress);
// 设置收件人邮箱地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail)); // 单个收件人
// 设置邮件标题
message.setSubject(subject);
// 邮件内容
message.setContent(content, "text/html;charset=utf-8");
Transport tr = session.getTransport("smtp");
tr.connect(smtpHost, address, smtpPassword); // 关键(连接发件服务器smtp,传入参数:主机名,连接账户,连接密码)
message.saveChanges(); // 保存并生成最终的邮件内容
tr.sendMessage(message, message.getAllRecipients());
tr.close();
}
}

本文介绍了如何将邮件发送的配置信息存储在MySQL数据库中,并提供了相关表的建表脚本以及用于发送邮件的工具类的概述。

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



