1. 程式人生 > 其它 >仿牛客網社群開發——第2章 Spring Boot實踐,開發社群登入模組

仿牛客網社群開發——第2章 Spring Boot實踐,開發社群登入模組

傳送郵件

郵箱設定 - 啟動客戶端SMTP服務

以新浪郵箱為例:

將設定中的POP3/SMTP服務中的服務狀態設定為開啟。

(SMTP的全稱是“SimpleMailTransferProtocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP協議屬於TCP/IP協議簇,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地,SMTP伺服器就是遵循SMTP協議的傳送郵件伺服器,不同郵件服務商均有對應的smtp伺服器地址,並且這個地址會提供給大家,方便大家使用Foxmail與outlook等專業郵件管理軟體時可以用的上。)

Spring Mail - 匯入jar包

直接複製Maven的依賴即可,上mvnrepository.com搜Spring Mail,選擇對應的版本。

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

Spring Mail - 郵箱引數配置

# MailProperties
spring.mail.host=smtp.sina.com
spring.mail.port=465
[email protected]
spring.mail.password=6893139532308134
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
#spring.mail.properties.mail.smtp.auth=true
#spring.mail.properties.mail.smtp.starttls.enable=true
#spring.mail.properties.mail.smtp.starttls.required=tru

注意,配置檔案application.properties中的密碼spring.mail.password需要配置為郵箱生成的授權碼,否則無法傳送郵件。(至於最後3行配置註釋了也能正常傳送,不太清楚這個有啥作用)

Spring Mail - 使用 JavaMailSender 傳送郵件

分三步:

1、傳送人  2、收件人  3、郵件標題和內容

  • 編寫一個MailClient工具類用來發送郵件
  • 開啟 logger 日誌
  • 注入JavaMailSender(由 Spring 容器管理)
  • 傳送人 from 從配置檔案注入 username 到 Bean 中
  • 編寫一個公有的方法實現傳送郵件,傳入引數:收件人 to,標題 subject 和內容 content
  • 構建MimeMessage
  • 通過MimeMessageHelper設定發件人,收件人,標題和內容 setText 加上第二個引數 true 表示支援 html 文字
@Component
public class MailClient {

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

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;

    public void sendMail(String to, String subject, String content) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            mailSender.send(helper.getMimeMessage());
        } catch (MessagingException e) {
            logger.error("傳送郵件失敗" + e.getMessage());
        }
    }

}

測試傳送郵件(2個測試方法分別為傳送普通文字傳送Html文字):

//@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {

    @Autowired
    private MailClient mailClient;

    @Qualifier("templateEngine")
    @Autowired
    private TemplateEngine templateEngine;

    @Test
    public void testTextMail() {
        mailClient.sendMail("[email protected]", "Test", "zwcnb!");
    }

    @Test
    public void testHtmlMail() {
        Context context = new Context();
        context.setVariable("username", "周煒程");
        String content = templateEngine.process("/mail/demo", context);
        mailClient.sendMail("[email protected]", "Html", content);
    }

}

其中生成 Html 文字步驟如下:

  • 新建一個 mail 模板
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>郵件示例</title>
</head>
<body>
    <p>歡迎你,<span style="color:red" th:text="${username}"></span>!</p>
</body>
</html>
  • 自動裝配TemplateEngine模板引擎
  • 給模板傳參用Context,設定其引數
  • 呼叫模板引擎的process的方法,指定其模板和資料
  • 接受其生成的動態網頁即字串