• springbootstartermail 邮件发送


    Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐,Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。

    开通POP3/SMTP服务或者IMAP/SMTP服务

    使用邮箱发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。

    SMTP全称为Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。

    添加邮件依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    邮件基本信息配置:

    spring:
      mail:
        host: smtp.xxx.com
        username: xxx@xxx.com
        password: xxx
        default-encoding: UTF-8
        properties.mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
        properties.mail.debug: true

    发送简单邮件:

    @Component
    public class MailService {
    
        /**
         * JavaMailSender是Spring Boot在MailSenderPropertiesConfiguration类中配置好的,
         * 该类在Mail自动配置类MailSenderAutoConfiguration中导入,因此这里注入JavaMailSender就可以使用了。
         */
        @Autowired
        JavaMailSender javaMailSender;
    
        /**
         * sendSimpleMail方法的5个参数分别表示邮件发送者、收件人、抄送人、邮件主题以及邮件内容。
         *
         * @param from    发送者
         * @param to      收件人
         * @param cc      抄送人
         * @param subject 主题
         * @param content 内容
         */
        public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
            // 简单邮件可以直接构建一个SimpleMailMessage对象进行配置,配置完成后,通过JavaMailSender将邮件发送出去。
            SimpleMailMessage simpMsg = new SimpleMailMessage();
            simpMsg.setFrom(from);
            simpMsg.setTo(to);
            simpMsg.setCc(cc);
            simpMsg.setSubject(subject);
            simpMsg.setText(content);
            javaMailSender.send(simpMsg);
        }
    }
    

      

    发送带附件的邮件:

       /**
         * 发送带附件的邮件
         *
         * @param from    发送者
         * @param to      收件人
         * @param subject 主题
         * @param content 内容
         * @param file    附件
         */
        public void sendAttachFileMail(String from, String to, String subject, String content, File file) {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                /*
                 * 这里使用MimeMessageHelper简化了邮件配置,
                 * 它的构造方法的第二个参数true表示构造一个multipart message类型的邮件,
                 * multipart message类型的邮件包含多个正文、附件以及内嵌资源,邮件的表现形式更加丰富
                 */
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content);
                helper.addAttachment(file.getName(), file);
                javaMailSender.send(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    

      

    发送带图片资源的邮件:

    /**
         * 发送带图片资源的邮件
         *
         * @param from    发送者
         * @param to      收件人
         * @param subject 主题
         * @param content 内容
         * @param srcPath 图片资源路径
         * @param resIds  资源id
         */
        public void sendMailWithImg(String from, String to, String subject, String content, String[] srcPath, String[] resIds) {
            if (srcPath.length != resIds.length) {
                System.out.println("发送失败");
                return;
            }
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content, true);//第二个参数true表示邮件正文是HTML格式的,该参数不传默认为false。
                for (int i = 0; i < srcPath.length; i++) {
                    FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//通过FileSystemResource构造静态资源
                    helper.addInline(resIds[i], res);//调用addInline方法将资源加入邮件对象中
                }
                javaMailSender.send(message);
            } catch (MessagingException e) {
                System.out.println("发送失败");
            }
        }
    

      

    使用Thymeleaf构建邮件模板:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
        public void sendHtmlMail(String from, String to, String subject, String content) {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setTo(to);
                helper.setFrom(from);
                helper.setSubject(subject);
                helper.setText(content, true);
                javaMailSender.send(message);
            } catch (MessagingException e) {
                System.out.println("发送失败");
            }
        }
    

      

    测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MailServiceTest {
    
        @Autowired
        MailService mailService;
    
        @Test
        public void sendSimpleMail() {
            mailService.sendSimpleMail(
                    "xxx@xxx.com ",
                    "xxx@xxx.com ",
                    "xxx@xxx.com ",
                    "测试邮件主题",
                    "测试邮件内容");
        }
    
        @Test
        public void sendAttachFileMail() {
            mailService.sendAttachFileMail(
                    "xxx@xxx.com ",
                    "xxx@xxx.com ",
                    "测试邮件主题sendAttachFileMail",
                    "测试邮件内容sendAttachFileMail",
                    new File("C:\\Usersxxx\\Desktop\\导出导入\\邮件附件.docx"));
        }
    
        @Test
        public void sendMailWithImg() {
            mailService.sendMailWithImg(
                    "xxx@xxx.com ",
                    "xxx@xxx.com ",
                    "测试邮件主题(图片)",
                    "<div>hello,这是一封带图片资源的邮件:" +
                            "这是图片1:<div><img src='cid:p01'/></div>" +
                            "这是图片2:<div><img src='cid:p02'/></div>" +
                            "</div>",
                    new String[]{
                            "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg",
                            "C:\\Usersxxx\\Desktop\\Snipaste_2021-01-11_14-41-57.jpg"
                    },
                    new String[]{"p01", "p02"});
        }
    
        @Autowired
        TemplateEngine templateEngine;
    
        @Test
        public void sendHtmlMailThymeleaf() {
            /*
             * Thymeleaf提供了TemplateEngine来对模板进行渲染,通过Context构造模板中变量需要的值
             */
            Context ctx = new Context();
            ctx.setVariable("username", "sang");
            ctx.setVariable("gender", "男");
            String mail = templateEngine.process("mailtemplate.html", ctx);
            mailService.sendHtmlMail(
                    "xxx@xxx.com ",
                    "xxx@xxx.com ",
                    "测试邮件主题Thymeleaf",
                    mail);
        }
    
    }
    

      

    文章来源: Spring Boot+Vue全栈开发实战 - 13.1 邮件发送

  • 相关阅读:
    分析ASP.NET读取XML文件4种方法
    WordPress 主题教程 #4a:Header 模板
    WordPress 主题教程 #4b:Header 模板 2
    倍受好评的美国主机JustHost使用全攻略教程
    单链表的创建、插入、删除、倒置操作
    WordPress 主题教程:从零开始制作 WordPress 主题
    google adsense 设置建议
    PHP:10个不常见却非常有用的PHP函数
    WordPress 主题教程 #2:模板文件和模板
    必须掌握的八个cmd命令行
  • 原文地址:https://www.cnblogs.com/ooo0/p/16446829.html
Copyright © 2020-2023  润新知