• 使用Spring Boot发送邮件


    1 简介

    Spring Mail对Java Mail进行了封装,大大简化了邮件的发送,Spring Boot Mail在Spring Mail的基础上对邮件发送再次进行了封装,使邮件发送更加简单。
    本文主要包含以下内容

    • 发送文本邮件
    • 发送带有附件的邮件
    • 发送HTML邮件
    • 发送图片邮件
    • 发送模板邮件

    2 示例

    先设置好用于发送邮件邮箱的POP3/IMAP/SMTP,记住授权码

    2.1 项目搭建

    1. 新建spring-boot-mail maven项目。
    2. 加入pom依赖。
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
    
    1. 编写配置文件。
    # 设置邮箱主机
    spring.mail.host=smtp.163.com 
    # 邮箱名
    spring.mail.username=freech1688@163.com
    # 开通服务授权码
    spring.mail.password=xxx
    

    注意:spring.mail.password此处的密码不是邮箱登录密码,而是开通POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务的授权码,授权码是用于登录第三方邮件

    1. 创建主启动程序。创建主启动程序。
    @SpringBootApplication
    public class MailApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(MailApplication.class, args);
    	}
    }
    
    1. 编写测试类。
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MailApplicationTest {
    }
    

    2.2 编写实践代码

    2.2.1 发送文本邮件

    测试类中编写以下代码

    @Autowired
    private JavaMailSender sender;
    //邮件发送者
    private String from = "freech1688@163.com";
    //邮件接收者
    private String to = "569265915@qq.com";
    
    /**
     * 发送文本邮件
     */
    @Test
    public void sendTextEmail() {
        SimpleMailMessage message = new SimpleMailMessage();
        //发送者
        message.setFrom(from);
        //接收者
        message.setTo(to);
        //邮件主题
        message.setSubject("文本邮件");
        //邮件内容
        message.setText("你好,这是一份文本文件");
        sender.send(message);
    }
    

    运行结果:
    在这里插入图片描述

    2.2.2 发送带有附件的邮件

     /**
     * 发送带有附件的邮件
     */
    @Test
    public void sendAttachmentFilesEmail() throws MessagingException {
        MimeMessage message = sender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject("带有附件的邮件");
        helper.setText("你好,这是一份带有附件的邮件");
    
        //获取文件对象.
        FileSystemResource file1 = new FileSystemResource(new File("D:/test.rar"));
        //添加附件,切记attachmentFilename要带文件格式后缀,否则无法识别。
        helper.addAttachment("attachmentFile1.rar", file1);
        //添加多个附件,直接修改一下attachmentFilename。
        helper.addAttachment("attachmentFile2.rar", file1);
    
        sender.send(message);
    }
    

    运行结果:
    在这里插入图片描述

    2.2.3 发送HTML邮件

    @Test
    public void sendHtmlMail() throws MessagingException {
        MimeMessage message = sender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject("HTML邮件");
        String content = new StringBuffer().append("<html>").append("<head>").append("<title>HTML邮件</title>")
                .append("</head>").append("<body>").append("<h1>这是一份HTML邮件</h1>").append("</body>").append("</html>").toString();
        // 邮件内容,第二个参数指定发送的是HTML格式
        helper.setText(content, true);
        sender.send(message);
    
    }
    

    运行结果:
    在这里插入图片描述

    2.2.4 发送图片邮件

    @Test
    public void sendImagesMail() throws MessagingException {
        MimeMessage message = sender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject("图片邮件");
        String imgPath1 = "D:/images/1.jpg";
        String imgPath2 = "D:/images/2.jpg";
        String rscId1 = "001";
        String rscId2 = "002";
        String conntent = "<html><body><h3>带图片的邮件:</h3>图片一:<img style='200px;height:200px' src='cid:"+rscId1+"'><br>图片二:</img><img style='200px;height:200px'  src='cid:"+rscId2+"'></img></body></html>";
        helper.setText(conntent, true);
        FileSystemResource file1 = new FileSystemResource(new File(imgPath1));
        FileSystemResource file2 = new FileSystemResource(new File(imgPath2));
        helper.addInline(rscId1,file1);
        helper.addInline(rscId2,file2);
        sender.send(message);
    }
    

    运行结果:
    在这里插入图片描述

    2.2.5 发送模板邮件(freemarker示例)

    2.2.5.1 添加模板引擎依赖

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

    2.2.5.2 将模板引擎注入到Spring容器中

    @Component
    public class FreeMarkerConfig {
        @Bean
        public FreeMarkerConfigurer freeMarkerConfigurer() {
            FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
            configurer.setTemplateLoaderPath("classpath:templates");
            return configurer;
        }
    }
    

    2.5.5.3 在resources/templates新建template.ftl模板文件

    <html>  
    <body>  
        <span>您好! ${name}, 感谢您的注册!请点击下面的验证链接完成注册,谢谢您的支持!</span><br>
        <a href="https://blog.csdn.net/qwqw3333333/article/details/83538247">点击验证</a>
    </body>  
    </html>
    

    2.5.5.4 编写发送邮件代码

    //注入FreeMarkerConfigurer
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    /**
     * 发送模板邮件
     */
    @Test
    public void sendTemplateMail() throws MessagingException, IOException, TemplateException {
    
        MimeMessage message = sender.createMimeMessage();
    
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(from);
        helper.setTo(to);
        helper.setSubject("模板邮件");
    
        Map<String, Object> model = new HashMap<>();
        model.put("name", "Freech");
    
        freeMarkerConfigurer.setTemplateLoaderPath("classpath:templates");
        //加载模板文件
        Template template = freeMarkerConfigurer.getConfiguration().getTemplate("template.ftl");
        String html = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
        helper.setText(html, true);
        sender.send(message);
    }
    

    运行结果:
    在这里插入图片描述

    看源码点这里

    只有把命运掌握在自己手中,从今天起开始努力,即使暂时看不到希望,也要相信自己。因为比你牛几倍的人,依然在努力。
  • 相关阅读:
    Ubuntu20.04更换软件源
    使用kubeadm安装k8s1.19版本之系统基础环境配置&k8s集群初始化(二)
    k8s如何删除处于terminating状态的ns资源
    k8s如何强制删除pod&pv&pvc和ns&namespace方法
    C语言中的有符号数和无符号整形数转换
    互联网-架构演进
    结合redis使token失效
    有一种爱叫做放手
    js 读取上传的json文件内容
    使用spark-md5获取文件的MD5值
  • 原文地址:https://www.cnblogs.com/freesky168/p/14358213.html
Copyright © 2020-2023  润新知