Spring Boot笔记(二) springboot 集成 SMTP 发送邮件

个人博客网:https://wushaopei.github.io/    (你想要这里多有)

笔记:乘着项目迭代的间隙,把一些可复用的功能从项目中抽取出来,这是其中之一,

一、添加SMTP 及 MAIL 的 pom.xml 依赖

               <!--郵箱發送-->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

注意: 依赖添加后会要求刷新 springBootConguration 的配置信息,可执行也可不理睬

具体操作如下:

二、配置yml邮箱参数

1、在 application-dev.yml中配置对应的邮箱参数


#邮件配置
email:
  host: smtp.163.com
  username: 1598974689@163.com
  password: 1598974689wsp
  senderName: 1598974689@163.com

#发送提醒邮件的接收方
sendToMail: 1862030785@foxmail.com
sendToPeopleName: wen

2、由于是使用SMTP实现邮箱发送,除了提供必要的邮箱、密码等参数外,还要开启邮箱账号的 SMTP 设置,

打勾选中要设置的服务项,通过校验短信息设置授权码,使用授权码代替  邮箱密码 实现邮件的发送,流程很简单的。

三、相关工具类和 实体类的创建

1、邮箱 参数 config

package com.example.poiutis.model.common;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/**
 * @ClassName EmailConfig
 * @Description TODO
 * @Author wushaopei
 * @Date 2019/7/25 10:24
 * @Version 1.0
 */
@Configuration
@ConfigurationProperties(prefix = "email", ignoreUnknownFields = false)
//@PropertySource("classpath:/application.yml")
public class EmailConfig {
    private String host;
    private String username;
    private String password;
    private String senderName;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSenderName() {
        return senderName;
    }

    public void setSenderName(String senderName) {
        this.senderName = senderName;
    }

    @Override
    public String toString() {
        return "EmailConfig{" +
                "host='" + host + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", senderName='" + senderName + '\'' +
                '}';
    }
}

2、 Email 发送实现工具类

package com.example.poiutis.utils.Email;
import com.example.poiutis.model.common.EmailConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * @ClassName MailSenderFacade
 * @Description TODO
 * @Author wushaopei
 * @Date 2019/7/25 10:22
 * @Version 1.0
 */
@Component
public class MailSenderFacade {

    @Autowired
    private EmailConfig emailConfig;

    private final Logger logger = LoggerFactory.getLogger(MailSenderFacade.class);

    public void sendMailHtml(final String toEmail,final String subject,final String text){
        try{
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            javaMailSender.setUsername(emailConfig.getUsername());
            javaMailSender.setPassword(emailConfig.getPassword());
            javaMailSender.setHost(emailConfig.getHost());
            javaMailSender.setPort(25);
            javaMailSender.setProtocol("smtp");
            javaMailSender.setDefaultEncoding("UTF-8");
            Properties mailProperties = new Properties();
            mailProperties.put("mail.smtp.auth", true);
            mailProperties.put("mail.smtp.starttls.enable", true);
            javaMailSender.setJavaMailProperties(mailProperties);
            MimeMessage mimeMessage = getMimeMessage(toEmail,subject,text, javaMailSender);
            javaMailSender.send(mimeMessage);
            logger.info("发往 "+toEmail+" 邮件发送成功");
        } catch (MessagingException e) {
            logger.error("发往 "+toEmail+" 邮件发送异常", e);
        }
    }


    private MimeMessage getMimeMessage(String toEmail,String subject,String text, JavaMailSenderImpl javaMailSender) throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        mimeMessageHelper.setFrom(emailConfig.getSenderName());
        mimeMessageHelper.setTo(toEmail);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(text, true);
        return mimeMessage;
    }
}

四、测试SMTP功能发送一个邮件试试

 @RequestMapping(value = "/please/emailTest", method = RequestMethod.GET)
    public Object getEmailTest() {
            Map<String,Object> map = null;
        try{
            map = new HashMap<>();
            mailSenderFacade.sendMailHtml("18620307785@163.com", "来自邮箱测试接口邮件", "来自邮箱测试接口邮件");
            map.put("state","0");
            map.put("message", "导出成功");

        }catch (Exception e){
            map.put("state","1");
            map.put("message", "导出失敗");
            e.printStackTrace();
        }
        return map;
    }

发送成功:

收到的邮件:

GitHub

posted @ 2019-12-03 20:54  维宇空灵  阅读(3002)  评论(3编辑  收藏  举报