spring-boot应用发送邮件

在用户注册及忘记密码功能中需要使用发送验证码到邮箱,spring-boot中只需要在properties文件添加相关配置就能实现发送邮件的功能。
在yml文件中添加如下配置

spring:
  email:
     #SMTP server host,这里我使用的是阿里云SMTP服务器
    host: smtp.qiye.aliyun.com
    # Login user of the SMTP server
    username: test@aaa.com
    # Login password of the SMTP server
    password: 123456
    # Protocol used by the SMTP server
    protocol: smtp
    default-encoding: utf-8
    properties:
     mail:
      smtp:
       starttls:
         enable: false
       auth: true
       socketFactory:
         class:  javax.net.ssl.SSLSocketFactory
         port: 465

2.使用JavaMailSender发送邮件

public abstract class AbstractEmailHandler {
	Logger logger= LogManager.getLogger(EmailHandler.class);
	@Autowired
	private JavaMailSender mailSender;
	@Autowired
	private TemplateEngine templateEngine;

	/**
	 * 发送 html 格式邮件
	 * @param from 发件人邮箱
	 * @param to 收件人邮箱
	 * @param subject 主题
	 * @param content 内容
	 */
	public void sendHtmlEmail(String from,String to,String subject,String content) {
		if (logger.isInfoEnabled()) {
			logger.info("start send html email ");
		}
		MimeMessage mimeMessage=mailSender.createMimeMessage();
		try {
			MimeMessageHelper messageHelper=new MimeMessageHelper(mimeMessage,true);
			messageHelper.setFrom(from);
			messageHelper.setTo(to);
			messageHelper.setSubject(subject);
			messageHelper.setText(content,true);
			ClassPathResource logoImage=new ClassPathResource("templates/images/logo.png");
			messageHelper.addInline("logoImage",logoImage);
			mailSender.send(mimeMessage);
			if (logger.isInfoEnabled()) {
				logger.info("html email send success");
			}
		} catch (Exception e) {
			logger.error("发送验证码邮件出错",e);
			throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"验证码邮件发送失败");
		}
	}

	/**
	 * 发送HTML邮件
	 * @param fromEmail 发送者邮箱地址
	 * @param toEmail 收件人邮箱地址
	 * @param subject 主题
	 * @param templateName 模板名称
	 * @param contextParams 模板上下文变量
	 */
	public void sendHtmlEmail(String fromEmail, String toEmail, String subject, String templateName, Map<String,Object> contextParams) {
		// 创建html模板上下文对象
		Context context = new Context(Locale.CHINESE);
		if (contextParams!= null && !contextParams.isEmpty()) {
			context.setVariables(contextParams);
		}
		// 处理模板内容
		String emailContent = templateEngine.process(templateName, context);
		//  发送html邮件
		sendHtmlEmail(fromEmail, toEmail, subject, emailContent);
	}

	/**
	 * 发送文字邮件
	 * @param fromEmail
	 * @param toEmail
	 * @param subject
	 * @param content
	 */
	public void sendCharacterEmail(String fromEmail,String toEmail,String subject,String content) {
		if (logger.isInfoEnabled()) {
			logger.info("start send character email ");
		}
		MimeMessage mimeMessage=mailSender.createMimeMessage();
		MimeMessageHelper messageHelper= null;
		try {
			messageHelper = new MimeMessageHelper(mimeMessage,true);
			messageHelper.setFrom(fromEmail);
			messageHelper.setTo(toEmail);
			messageHelper.setSubject(subject);
			messageHelper.setText(content,false);
			mailSender.send(mimeMessage);
			if (logger.isInfoEnabled()) {
				logger.info("charater email send success");
			}
		} catch (MessagingException e) {
			logger.error("发送邮件出错",e);
			throw new BusinessException(ResponseStatusCode.REQUEST_BUSINESS_ERROR.getCode(),"邮件发送失败");
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章