zoukankan      html  css  js  c++  java
  • SpringBoot邮件发送

    邮件的发送也是使用较多的,下面进行说明。

    1.准备工作

    这里使用QQ邮箱进行发送邮件,所以要先开启POP3/SMTP服务或IMAP/SMTP服务,登陆网页版QQ邮箱,在设置中找到账户,在下面开启服务即可。

    1)新建一个SpringBoot的项目,导入mail依赖

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

    2)配置邮件的基本信息

    spring:
      mail:
        #邮件服务器的地址
        host: smtp.qq.com
        #邮件服务器的端口号,465或587
        port: 465
        #用户账号
        username: 1916008067@qq.com
        #用户密码,这个密码是开启服务后系统显示的密码
        password: zysferigqzobxqkfcej
        default-encoding: UTF-8
        properties:
          mail:
            #配置SSL连接
            smtp:
              socketFactory.class: javax.net.ssl.SSLSocketFactory
            #开启dubug
            debug: true

    2.简单邮件

    简单邮件只包含文字信息。

     第一步:创建一个MailService类

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Component;
    
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    import java.io.File;
    
    @Component
    public class MailService {
        @Autowired
        JavaMailSender javaMailSender;
    
        //简单邮件
        public void sendSimpleMail(String sender,String recipient,String cc,String title,String content){
            SimpleMailMessage message=new SimpleMailMessage();
            message.setFrom(sender);//发送者
            message.setTo(recipient);//收件人
            message.setCc(cc);//抄送人
            message.setSubject(title);//邮件主题
            message.setText(content);//邮件内容
            javaMailSender.send(message);
        }
    }

    第二步:在测试目录创建一个测试类Demo2ApplicationTests 

    package com.example.demo;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import org.junit.jupiter.api.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;
    
    import java.io.File;
    import java.io.StringWriter;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest
    class Demo2ApplicationTests {
        @Autowired
        private MailService mailService;
    
        @Test
        public void sendSimpleMail(){
            mailService.sendSimpleMail(
                    "1916008067@qq.com","1953090026@qq.com",
                    "1953090026@qq.com","通知","今天加班");
        }
    }

    第三步:运行测试方法,即可在收件人的邮箱看到邮件的信息。

    3.带附件的邮件

     第一步:在MailService中添加一个方法

     //带附件的邮件
        public void sendAttachFileMail(String sender, String recipient, String cc,
                                       String title, String content, File file) {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);//发送者
                helper.setTo(recipient);//收件人
                helper.setCc(cc);//抄送人
                helper.setSubject(title);//邮件主题
                helper.setText(content);//邮件内容
                helper.addAttachment(file.getName(),file);//文件
                javaMailSender.send(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }

    第二步:在测试类中添加方法

    @Test
        public void sendAttachFileMail(){
            mailService.sendAttachFileMail(
                    "1916008067@qq.com","1953090026@qq.com",
                    "1953090026@qq.com","通知","今天加班",
                    new File("D:\test1.txt"));
        }

    第三步:运行测试方法,即可在收件人的邮箱看到邮件的信息和附件。

    4.带图片的附件

     第一步:在MailService中添加一个方法

     //带图片的邮件
        public void sendMailWithImage(String sender, String recipient, String cc,String title,
                                      String content, String[] srcPath,String[] resId){
            if(srcPath.length!=resId.length){
                System.out.println("发送失败");
                return;
            }
            try{
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);//发送者
                helper.setTo(recipient);//收件人
                helper.setCc(cc);//抄送人
                helper.setSubject(title);//邮件主题
                helper.setText(content,true);//邮件内容,设置为true说明正文是html格式
                for (int i = 0; i <srcPath.length ; i++) {
                    FileSystemResource res=new FileSystemResource(new File(srcPath[i]));
                    helper.addInline(resId[i],res);
                }
                javaMailSender.send(message);
            }catch (MessagingException e){
                e.printStackTrace();
                System.out.println("发送失败");
            }
        }

    第二步:在测试类中添加方法

     @Test
        public void sendMailWithImage(){
            mailService.sendMailWithImage(
                    "1916008067@qq.com","1953090026@qq.com",
                    "1953090026@qq.com","带图片的邮件",
                    "<div><img src='cid:p01'/><img src='cid:p02'/></div>",
                    new String[]{"D:\1.png","D:\2.png"},new String[]{"p01","p02"});
        }

    第三步:运行测试方法,即可在收件人的邮箱看到邮件的信息。

    5.使用Freemarker模板的邮件

    第一步:导入依赖

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

    第二步:在MailService中添加一个方法

    //模板邮件
        public void sendHtmlMail(String sender, String recipient, String cc,
                                       String title, String content) {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);//发送者
                helper.setTo(recipient);//收件人
                helper.setCc(cc);//抄送人
                helper.setSubject(title);//邮件主题
                helper.setText(content,true);//邮件内容
                javaMailSender.send(message);
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }

    第三步:创建邮件模板

    在资源目录下的static目录下新建一个名字为mailtemplate.ftl的模板文件

    <div>邮箱激活</div>
    <div>你的注册信息
        <table>
            <tr>
                <td>用户名</td>
                <td>${username}</td>
            </tr>
            <tr>
                <td>用户性别</td>
                <td>${sex}</td>
            </tr>
        </table>
        <div><a href="http://www.baidu.com">点击激活邮箱</a></div>
    </div>

    第四步:创建实体类User

    package com.example.demo;
    
    public class User {
        private String username;
        private String sex;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }

    第五步:在测试类中添加方法

     @Test
        public void sendHtmlMail() {
            try {
                Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
                ClassLoader loader = Demo2Application.class.getClassLoader();
                configuration.setClassLoaderForTemplateLoading(loader,"static");
                Template template = configuration.getTemplate("mailtemplate.ftl");
                StringWriter writer = new StringWriter();
                User user=new User();
                user.setSex("");
                user.setUsername("张三哈哈哈");
                template.process(user,writer);
                mailService.sendHtmlMail(
                        "1916008067@qq.com","1953090026@qq.com",
                        "1953090026@qq.com","模板文件",writer.toString()
                );
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    第六步:运行测试方法,即可在收件人的邮箱看到邮件的信息。

    6.使用Thymeleaf模板的邮件

    第一步:导入依赖

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

     第二步:创建模板文件

    在资源目录的templates目录下新建一个名为mailtemplate.html的模板文件

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.com">
    <head>
        <meta charset="UTF-8">
        <title>邮件</title>
    </head>
    <body>
    <div>邮箱激活</div>
    <div>你的注册信息
        <table>
            <tr>
                <td>用户名</td>
                <td th:text="${username}"></td>
            </tr>
            <tr>
                <td>用户性别</td>
                <td th:text="${sex}"></td>
            </tr>
        </table>
        <div><a href="http://www.baidu.com">点击激活邮箱</a></div>
    </div>
    
    </body>
    </html>

    第三步:在测试类中添加方法

    这里没有在MailService类中添加方法,而是直接使用了上述sendHtmlMail方法。

     @Autowired
        private TemplateEngine templateEngine;
        @Test
        public void sendHtmlMail2(){
            Context context = new Context();
            context.setVariable("username","赵柳");
            context.setVariable("sex","");
            String mail=templateEngine.process("mailtemplate.html",context);
            mailService.sendHtmlMail(
                    "1916008067@qq.com","1953090026@qq.com",
                    "1953090026@qq.com","模板文件2",mail
            );
        }

    第四步:运行测试方法,即可在收件人的邮箱看到邮件的信息。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    AES-GCM算法
    Linux Curl命令
    OpenLDAP
    网络性能测试
    LoadRunner
    XSLT
    dtruss
    删除重复图片
    2018年部门管理的一点总结
    矢量地图方案的进一步探讨
  • 原文地址:https://www.cnblogs.com/zys2019/p/14968258.html
Copyright © 2011-2022 走看看