发送邮件,把发送邮件的配置信息放到mysql表中的方式

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

    发送邮件,把发送邮件的配置信息放到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();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值