美文网首页SpringBoot精通之路-低调小熊猫
SpringBoot(十三):JavaMailSender邮件服

SpringBoot(十三):JavaMailSender邮件服

作者: 低调小熊猫 | 来源:发表于2018-11-13 10:28 被阅读4次

    版权声明

    本作品采用<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">知识共享署名 4.0 国际许可协议</a>进行许可。
    本文作者:低调小熊猫
    文章链接:https://aodeng.cc/archives/springbootshisans
    转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032

    单纯的广告

    个人博客:https://aodeng.cc
    微信公众号:低调小熊猫
    qq交流群:756796932

    简介

    发送邮件可以实现,注册验证,忘记密码等功能,还可以打广告,可谓很nice的功能了

    使用

    添加依赖

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

    配置文件

    spring:
      mail:
        host: *** #//邮箱服务器地址
        username: ***
        password: ***
        default-encoding: UTF-8
    #以谁来发送邮件
    mail.fromMail.addr: ***
    

    封装接口

    public interface EmailService {
        void sendTextEmail(String to,String subject,String content);
        void sendHtmlEmali(String to,String subject,String content);
        void sendAttachmentsEmail(String to,String subject,String content,String filePath);
        void sendStaticResourcesEmail(String to,String subject,String content,String rscPath,String rscId);
    }
    

    实现接口,这里是关键代码了

    /**
     * @program:hope
     * @author:aodeng
     * @create:2018-10-11 13:25
     **/
    @Service
    public class EmaliServiceImpl implements EmailService {
    
        private static final Logger log= LoggerFactory.getLogger(EmaliServiceImpl.class);
        @Autowired
        private JavaMailSender mailSender;
    
        @Value("${mail.fromMail.addr}")
        private String from;
    
        /***
         * 发送文本邮件
         * @param to
         * @param subject
         * @param content
         */
        @Override
        public void sendTextEmail(String to, String subject, String content) {
            SimpleMailMessage mailMessage=new SimpleMailMessage();
            mailMessage.setFrom(from);
            mailMessage.setTo(to);
            mailMessage.setSubject(subject);
            mailMessage.setText(content);
            try {
                mailSender.send(mailMessage);
                log.info("[文本邮件发送成功,当前时间]-[{}]",new Date());
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        /***
         * html邮件
         * @param to
         * @param subject
         * @param content
         */
        @Override
        public void sendHtmlEmali(String to, String subject, String content) {
            MimeMessage message=mailSender.createMimeMessage();
            try {
                MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content);
                //发送邮件
                mailSender.send(message);
                log.info("[html邮件发送成功,当前时间]-[{}]",new Date());
            }catch (MessagingException e){
                e.printStackTrace();
            }
        }
    
        /***
         * 附件邮件
         * @param to
         * @param subject
         * @param content
         * @param filePath
         */
        @Override
        public void sendAttachmentsEmail(String to, String subject, String content, String filePath) {
            MimeMessage message=mailSender.createMimeMessage();
            try {
                MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content,true);
                //上传附件
                FileSystemResource resource=new FileSystemResource(new File(filePath));
                String fileName=filePath.substring(filePath.lastIndexOf(File.separator));
                helper.addAttachment(fileName,resource);
                //发送邮件
                mailSender.send(message);
                log.info("[附件邮件发送成功,当前时间]-[{}]",new Date());
            }catch (MessagingException e){
                e.printStackTrace();
            }
        }
    
        /***
         * 嵌入静态资源邮件
         * @param to
         * @param subject
         * @param content
         * @param rscPath
         * @param rscId
         */
        @Override
        public void sendStaticResourcesEmail(String to, String subject, String content, String rscPath, String rscId) {
            MimeMessage message=mailSender.createMimeMessage();
            try {
                MimeMessageHelper helper=new MimeMessageHelper(message,true);//true表示创建一个multipart message
                helper.setFrom(from);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content,true);
                //嵌入静态资源
                FileSystemResource resource=new FileSystemResource(new File(rscPath));
                helper.addInline(rscId,resource);
    
                //发送邮件
                mailSender.send(message);
                log.info("[嵌入静态资源邮件发送成功,当前时间]-[{}]",new Date());
            }catch (MessagingException e){
                e.printStackTrace();
            }
        }
    
    }
    

    测试功能

    @Test
        public void test1(){
            //for(int i=0;i<=2;i++){
                emailService.sendTextEmail("邮件地址","测试","收到请回复,over!");
            //}
        }
        @Test
        public void test2(){
            String content="<html>\n" +
                    "<body>\n" +
                    "    <h3>hello world ! 这是一封html邮件!</h3>\n" +
                    "</body>\n" +
                    "</html>";
            emailService.sendHtmlEmali("邮件地址","测试",content);
        }
        @Test
        public void test3(){
            emailService.sendAttachmentsEmail("邮件地址","测试","收到请回复,over!","C:\\Users\\ad182\\Pictures\\image3\\a.jpg");
        }
        @Test
        public void test4(){
            String rscId = "neo006";
            String content="<html><body>这是有图片的邮件:<img src=\'cid:" + rscId + "\' ></body></html>";
            String imgPath = "C:\\Users\\ad182\\Pictures\\image3\\a.jpg";
            emailService.sendStaticResourcesEmail("邮件地址","测试",content,imgPath,rscId);
        }
    

    还有一个发送邮件验证的功能
    添加引擎模板

    <!-- 模板引擎 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    

    创建一个页面,注意:页面名称和后台参数名称要一致

    <body>
            您好,这是验证邮件,请点击下面的链接完成验证,<br/>
            <a href="#" th:href="@{ https://aodeng.cc/{id}(id=${id}) }">激活账号</a>
        </body>
    

    发送验证邮件,其实就是后台拼接一个参数到页面,将页面发个用户,用户点击页面的带参数的链接,后台接收参数,然后就实现验证的功能了

        @Test
        public void test5() {
            //创建邮件正文
            org.thymeleaf.context.Context context = new org.thymeleaf.context.Context();
            context.setVariable("id", "006");
            String emailContent = templateEngine.process("emailTemplate", context);
    
            emailService.sendHtmlEmali("f12974049826@163.com","主题:这是模板邮件",emailContent);
        }
    

    源码地址

    https://github.com/java-aodeng/hope

    相关文章

      网友评论

        本文标题:SpringBoot(十三):JavaMailSender邮件服

        本文链接:https://www.haomeiwen.com/subject/gjjkfqtx.html