zoukankan      html  css  js  c++  java
  • Spring Boot笔记之邮件(spring-boot-starter-mail)

    pom.xml引入spring-boot-starter-mail

    Spring Boot2.x集成了mail模块,在dependencies引入这个

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

    application.yml配置

    spring:
    	mail:
        	# 163
        	host: smtp.163.com
        	port:
        	username: yimcarson@163.com
        	password: ************
        	protocol: smtp
        	default-encoding: UTF-8
        	properties:
          		mail.smtp.auth: true
          		mail.smtp.starttls.enable: true
          		mail.smtp.starttls.required: true
          		mail.smtp.socketFactory.port: 465
          		mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
          		mail.smtp.socketFactory.fallback: false
    

    其中spring.mail.host spring.mail.port spring.mail.username spring.mail.password不同邮箱的配置方法也不同

    163邮箱

    spring:
    	mail:
        		host: smtp.163.com
        		port:
        		username: yimcarson@163.com
        		password: ************
    

    其中spring.mail.port不指定;spring.mail.password不是邮箱密码,需要登录mail.163.com,前往设置 客户端授权密码中获取的一个16个字符的密码,同时允许POP3/SMTP服务。

    163邮箱设置1

    163邮箱设置2

    QQ邮箱

    spring:
    	mail:
        		host: smtp.qq.com
        		port: 587
        		username: yimcarson@qq.com
        		password: ************
    

    spring.mail.password不是QQ密码,登录mail.qq.com,前往设置 账户 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务开启POP3/SMTP服务获取一个16个字符的密码

    mail.163.com设置

    Gmail邮箱

    spring:
    	mail: 
    		host: smtp.gmail.com
    		port: 465
    		username: yimcarson@gmail.com
    		password: ****************
    

    spring.mail.password是Gmail的密码,但是要前往Google账户的安全性较低的应用的访问权限中允许不安全应用。

    Google账户设置

    发送邮件

    这是一个验证码模版邮件

    service实现类

    import com.my.demo.project.service.MailService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.mail.javamail.MimeMessagePreparator;
    import org.springframework.stereotype.Service;
    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;
    

    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    import java.util.UUID;

    @Service
    public class MailServiceImpl implements MailService {

    <span class="token annotation punctuation">@Autowired</span>
    <span class="token keyword">private</span> JavaMailSender mailSender<span class="token punctuation">;</span>
    
    <span class="token comment">/**
     * 用来发送模版邮件
     */</span>
    <span class="token annotation punctuation">@Autowired</span>
    <span class="token keyword">private</span> TemplateEngine templateEngine<span class="token punctuation">;</span>
    
    <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"${spring.mail.username}"</span><span class="token punctuation">)</span>
    <span class="token keyword">private</span> String from<span class="token punctuation">;</span>
    
    <span class="token annotation punctuation">@Override</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">send</span><span class="token punctuation">(</span>String to<span class="token punctuation">,</span> String subject<span class="token punctuation">,</span> String text<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    

    // SimpleMailMessage message = new SimpleMailMessage();
    // message.setFrom(from);
    // message.setTo(to);
    // message.setSubject(subject);
    // message.setText(text);

        Context context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Context</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        context<span class="token punctuation">.</span><span class="token function">setVariable</span><span class="token punctuation">(</span><span class="token string">"project"</span><span class="token punctuation">,</span> <span class="token string">"demo"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        context<span class="token punctuation">.</span><span class="token function">setVariable</span><span class="token punctuation">(</span><span class="token string">"author"</span><span class="token punctuation">,</span> <span class="token string">"yimcarson"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        context<span class="token punctuation">.</span><span class="token function">setVariable</span><span class="token punctuation">(</span><span class="token string">"code"</span><span class="token punctuation">,</span> text<span class="token punctuation">)</span><span class="token punctuation">;</span>
        String emailContent <span class="token operator">=</span> templateEngine<span class="token punctuation">.</span><span class="token function">process</span><span class="token punctuation">(</span><span class="token string">"mail"</span><span class="token punctuation">,</span> context<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
        MimeMessage message <span class="token operator">=</span> mailSender<span class="token punctuation">.</span><span class="token function">createMimeMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        MimeMessageHelper helper <span class="token operator">=</span> null<span class="token punctuation">;</span>
        <span class="token keyword">try</span> <span class="token punctuation">{</span>
            helper <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMessageHelper</span><span class="token punctuation">(</span>message<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            helper<span class="token punctuation">.</span><span class="token function">setFrom</span><span class="token punctuation">(</span>from<span class="token punctuation">)</span><span class="token punctuation">;</span>
            helper<span class="token punctuation">.</span><span class="token function">setTo</span><span class="token punctuation">(</span>to<span class="token punctuation">)</span><span class="token punctuation">;</span>
            helper<span class="token punctuation">.</span><span class="token function">setSubject</span><span class="token punctuation">(</span>subject<span class="token punctuation">)</span><span class="token punctuation">;</span>
            helper<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span>emailContent<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">MessagingException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        mailSender<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    

    }

    templates模版

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    	<head>
    	    <meta charset="UTF-8">
    	    <title>yimcarson</title>
    	    <style>
    	        body {
    	            text-align: center;
    	            margin-left: auto;
    	            margin-right: auto;
    	        }
    	        #main {
    	            text-align: center;
    	            position: absolute;
    	        }
    	    </style>
    	</head>
    	<body>
    		<div id="main">
    	    	<h3>Welcome <span th:text="${project}"></span> -By <span th:text=" ${author}"></span></h3>
    	    	Your Verification Code is
    	    	<h2><span th:text="${code}"></span></h2>
    		</div>
    	</body>
    </html>
    

    测试

    import com.my.demo.Application;
    import org.junit.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.SpringRunner;
    import org.thymeleaf.TemplateEngine;
    

    import java.util.Date;
    import java.util.UUID;

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {Application.class})
    public class MailServiceTest {
    @Autowired
    private MailService mailService;

    <span class="token annotation punctuation">@Test</span>
    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testSend</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    	String to <span class="token operator">=</span> <span class="token string">"yimcarson@qq.com"</span><span class="token punctuation">;</span>
    	mailService<span class="token punctuation">.</span><span class="token function">send</span><span class="token punctuation">(</span>to<span class="token punctuation">,</span> <span class="token string">"模板邮件"</span><span class="token punctuation">,</span> UUID<span class="token punctuation">.</span><span class="token function">randomUUID</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    

    }

    接收到的模版邮件

    结语

    163 QQ这两个邮箱比较常用,至于Gmail……,如果服务器是阿里云香港或者国外、亚马逊这些的话可以正常使用,否则……,Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1

    Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1

    原文地址:https://blog.csdn.net/yimcarson/article/details/84936440

  • 相关阅读:
    JS创建对象的四种简单方式 (工厂模式和自定义构造函数创建对象的区别)
    对js原型对象、实例化对象及prototype属性的一些见解
    Javascript中的undefined、null、""、0值和false的区别总结
    new Function()语法
    声明函数的方法 之 语句定义法(函数声明法)和表达式定义法(函数表达式)
    匿名函数function前面的! ~等符号作用小解
    proxyTable设置代理解决跨域问题
    vue之递归组件实现树形目录
    关于页面出现弹窗时,页面还可以滚动问题
    倒计时功能
  • 原文地址:https://www.cnblogs.com/jpfss/p/11040952.html
Copyright © 2011-2022 走看看