springboot2.x整合JavaMail以qq郵箱發送郵件

本文參考spring官網email接口文檔所寫。

spring-email官方網址:https://docs.spring.io/spring/docs/5.1.8.RELEASE/spring-framework-reference/integration.html#mail

 

1:添加相關依賴

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

 

2:先建一個郵箱收件人model

 

package com.dev.model.email;

import java.io.Serializable;

/**
 * Created on 2019-08-02 16:16.
 *
 * @author zgq7
 */
public class EmailModel implements Serializable {

    /**
     * 收件人姓名
     **/
    private String recieverName;

    /**
     * 收件人郵箱地址
     **/
    private String recieverEmailAddress;

    /**
     * 郵件主題
     **/
    private String emailTheme;

    /**
     * 郵件內容
     **/
    private String emailContent;

    public String getRecieverName() {
        return recieverName;
    }

    public void setRecieverName(String recieverName) {
        this.recieverName = recieverName;
    }

    public String getRecieverEmailAddress() {
        return recieverEmailAddress;
    }

    public void setRecieverEmailAddress(String recieverEmailAddress) {
        this.recieverEmailAddress = recieverEmailAddress;
    }

    public String getEmailTheme() {
        return emailTheme;
    }

    public void setEmailTheme(String emailTheme) {
        this.emailTheme = emailTheme;
    }

    public String getEmailContent() {
        return emailContent;
    }

    public void setEmailContent(String emailContent) {
        this.emailContent = emailContent;
    }
}

 

 

3:編寫一個郵箱工具類

 

package com.dev.utils.email;

import com.dev.model.email.EmailModel;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * Created on 2019-08-02 16:06.
 *
 * @author zgq7
 */
public class MailSendUtils {

    private static final Logger logger = LoggerFactory.getLogger(MailSendUtils.class);

    /**
     * 發送者地址
     **/
    private static String posterAdress = "[email protected]";

    /**
     * 發送者姓名
     **/
    private static final String posterName = "xxx";

    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private JavaMailSenderImpl javaMailSenderImpl;

    /**
     * 文本發送
     **/
    public void sendEmailAsText(final EmailModel emailModel) {
        MimeMessagePreparator mimeMessagePreparator = mimeMessage -> {
            mimeMessage.setFrom(posterAdress);
            mimeMessage.setRecipients(Message.RecipientType.TO, emailModel.getRecieverEmailAddress());
            mimeMessage.setText("<html><body>"
                    + "hello:" + emailModel.getRecieverName()
                    + "<br>" + "msg:" + emailModel.getEmailContent()
                    + "<br>" + "from :" + posterName
                    + "</body></html>");
        };
        try {
            this.javaMailSender.send(mimeMessagePreparator);
            logger.info("郵箱已返送至[{}]郵箱!", emailModel.getRecieverName());
        } catch (MailException e) {
            logger.error("郵箱異常:{}", e);
        }
    }

    /**
     * html 網頁發送
     * 該方法爲同步方法
     **/
    public void sendEmailAsSysExceptionHtml(final EmailModel emailModel) {
        MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage();
        MimeMessageHelper mimeMessageHelper;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setFrom(posterAdress);
            mimeMessageHelper.setTo(emailModel.getRecieverEmailAddress());
            mimeMessageHelper.setText("<!DOCTYPE html>\n" +
                            "<html>\n" +
                            "\t<head>\n" +
                            "\t\t<meta charset=\"UTF-8\">\n" +
                            "\t\t<title></title>\n" +
                            "\t</head>\n" +
                            "\t<style>\n" +
                            "\t\tbody,\n" +
                            "\t\ttable,\n" +
                            "\t\ttbody,\n" +
                            "\t\ttr {\n" +
                            "\t\t\tbackground-color: aquamarine;\n" +
                            "\t\t\tbackground-size: 100%;\n" +
                            "\t\t}\n" +
                            "\t</style>\n" +
                            "\n" +
                            "\t<body>\n" +
                            "\t\t<table border=\"solid 2 px\" align=\"center\" style=\"text-align: center;\">\n" +
                            "\t\t\t<tbody>\n" +
                            "\t\t\t\t<tr>\n" +
                            "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">時間</td>\n" +
                            "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "</td>\n" +
                            "\t\t\t\t</tr>\n" +
                            "\t\t\t\t<tr>\n" +
                            "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">信息</td>\n" +
                            "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\">" + "測試" + "</td>\n" +
                            "\t\t\t\t</tr>\n" +
                            "\t\t\t\t<tr>\n" +
                            "\t\t\t\t\t<td width=\"200px\" bgcolor=\"coral\">堆棧</td>\n" +
                            "\t\t\t\t\t<td width=\"80%\" bgcolor=\"azure\" style=\"text-align: left;\">" + emailModel.getEmailContent() + "</td>\n" +
                            "\t\t\t\t</tr>\n" +
                            "\t\t\t</tbody>\n" +
                            "\t\t</table>\n" +
                            "\t</body>\n" +
                            "\n" +
                            "</html>"
                    , true);

            this.javaMailSender.send(mimeMessage);
            logger.info("郵箱已返送至[{}]郵箱!", emailModel.getRecieverName());

        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (MailException e) {
            logger.error("郵箱異常:{}", e);
        }
    }

}

 

 

notice3.1:可自行設置文本發送api、html發送api、圖片發送api等。我的工具包中只寫了文本發送和html發送兩種格式的api。

 

4:在IOC中註冊EmailUtils的bean

package com.dev.config;
import com.dev.utils.email.MailSendUtils;

/** * Created by zgq7 on 2019/6/6. * 註冊一些bean進入ioc * */ @Configuration public class BeanRegistryCenterConfig {

   /** * 郵箱工具類 bean 註冊 **/ @Bean public MailSendUtils mailSendUtils() { return new MailSendUtils(); } }

 

5:在Application.xml中添加一下信息

spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=你的qq@qq.com
spring.mail.password=xxxxx                  
spring.mail.protocol=smtp
spring.mail.default-encoding=UTF-8

  notice1:spring.mail.usernam,是你的qq郵箱地址

  notice2:spring.mail.password,不要用真正的qq郵箱密碼,而是qq郵箱第三方服務授權碼

下面是獲取qq郵箱第三方服務授權碼的操步驟:

5.1:登錄qq郵箱,進入首頁,點擊設置按鈕

 

 5.2:點擊賬戶設置

 

   並拉到最下面點擊我圈中的開啓按鈕

  然後會彈出一個小框提示你發信息,發就行了,發送之後點擊驗證會收到授權碼

  除了spring.mail.username、spring.mail.password 兩項要換成自己的 ,其他的和我一樣就行;

 

6:進行郵件發送測試

6.1:文本發送測試

    /**
     * Java Mail 文本發送
     **/
    @Test
    public void EmaiTest() {
        EmailModel emailModel = new EmailModel();
        emailModel.setEmailTheme("測試");
        emailModel.setRecieverName("測試");
        emailModel.setEmailContent("測試");
        emailModel.setRecieverEmailAddress("[email protected]");

        mailSendUtils.sendEmailAsText(emailModel);
    }

發送成功後:

目標郵箱收到的郵件:

 

 

6.2:html發送測試

    /**
     * Java Mail 網頁發送
     **/
    @Test
    public void EmailTest2() throws MessagingException, InterruptedException {
        EmailModel emailModel = new EmailModel();
        emailModel.setEmailTheme("測試");
        emailModel.setRecieverName("測試");
        emailModel.setEmailContent("測試");
        emailModel.setRecieverEmailAddress("[email protected]");

        mailSendUtils.sendEmailAsSysExceptionHtml(emailModel);

    }

目標郵箱收到的郵件:

  這個展示效果可以自己設置。

 

 

 

7:注意點:發送郵件者的郵箱地址爲qq郵箱,否則會QQ郵箱認證報錯。而接收者郵箱可以爲其他的郵箱,如企業郵箱、網易郵箱等。

 

 

 看過的點個贊好不好啊。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章