SpringBoot 利用 JavaMailSender 发送邮件

Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot中也提供了相应的自动化配置。

  首先再POM文件中添加JAR包

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
这里有个大坑需要注意下载本地测试正常配置就可以但是发布到服务器上面下面的配置就不可以了需要加上阿里云的。
本地测试配置:
application.properties中配置相应的属性:(我这里模拟的是QQ邮箱给163邮箱发送邮件)
spring.mail.host=smtp.qq.com #个人邮箱
spring.mail.username=*********@qq.com
spring.mail.password=*********
spring.mail.default-encoding=UTF-8
项目发布到阿里云上的配置:
#本地测试邮箱
spring.mail.host=smtp.qq.com
spring.mail.username=0000000@qq.com
spring.mail.password=xxxxxxxxxxxxx
#spring.mail.default-encoding=UTF-8
#配置阿里云服务器发送邮件
spring.mail.port=465
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.properties.mail.imap.ssl.socketFactory.fallback=false
#密码需要注意下,如果是个人邮箱需要去申请授权码就是开通POP3/SMTP服务的时候系统会给你一穿密码,自己记录下来当作个人邮箱的密码使用,否则会报错(详细看下图),如果是企业邮箱则需要密码
详细步骤:进入到QQ邮箱-->设置-->账户

 


 @RestController

@RequestMapping("/mail")

public class MailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

  @Autowired
    private JavaMailSender mailSender;
@RequestMapping("/send")

//发送纯文字的
public void sendMail(){ 
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("****@qq.com"); // 发送人
        message.setTo("239****@163.com"); // 收件人
        message.setSubject("it is a test for spring boot"); // 主题
        message.setText("你好,我正在测试发送邮件。");
        try {

            mailSender.send(message);

            logger.info("测试邮件已发送。");

        } catch (Exception e) {

            logger.error("发送邮件时发生异常了!", e);

        }

    }

}

 发送带附件的邮件

  @RestController

@RequestMapping("/mail")

public class MailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

  @Autowired
    private JavaMailSender mailSender;
@RequestMapping("/send")
//导出不带图片的
public void sendMail(){ 
        MimeMessage mimeMessage = mailSender.createMimeMessage();
       MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
       helper.setFrom("****@qq.com"); //发件人
       helper.setTo("****@163.com"); // 收件人
       helper.setText("你好,我是小黄,我正在测试发送一封有附件的邮件。");FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));
      FileSystemResource file2 = new FileSystemResource(new File("d:\\java-1.jpg"));
      helper.addAttachment("附件-1.jpg", file1);
      helper.addAttachment("附件-2.jpg", file2);
      mailSender.send(mimeMessage);
            logger.info("测试带附件的邮件已发送。");
        try {
            mailSender.send(message);
            logger.info("测试邮件已发送。");
        } catch (Exception e) {
            logger.error("发送带附件邮件时发生异常了!!", e);
        }
    }

}

 嵌入静态资源的邮件

@RestController

@RequestMapping("/mail")

public class StaticResourceMailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

private JavaMailSender mailSender;

@RequestMapping("/static")

public void sendMail() throws MessagingException{
 
MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

helper.setFrom("******@qq.com");//发件人

helper.setTo("239****@qq.com"); // 收件人

helper.setSubject("主题:嵌入静态资源");

helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);  

// 注意addInline()中资源名称 hello 必须与 text正文中cid:hello对应起来

FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

helper.addInline("hello", file1);
        try {
            mailSender.send(mimeMessage);
            logger.info("测试嵌入静态资源的邮件已发送。");
        } catch (Exception e) {

            logger.error("发送嵌入静态资源的邮件时发生异常了!", e);

        }

    }

}

 

posted on 2020-04-14 14:29  UnmatchedSelf  阅读(571)  评论(0编辑  收藏  举报

导航