Spring Boot 利用 Java Mail 實現郵件發送

目錄

1. 引入maven依賴

2. 配置郵箱bean信息

3. 加載bean配置信息

4. 郵件發送類

5. 測試郵件發送


實現郵件發送的方法有很多,這裏只是簡單記錄一個demo實現

1. 引入maven依賴

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>

2. 配置郵箱bean信息

我的配置文件名稱是application-bean.xml

我是用qq郵箱做的測試,這裏需要注意的是password要配置成郵箱授權碼,不是郵箱密碼

簡單說下郵箱授權碼的獲取方式:

登錄網頁版QQ郵箱 > 設置 > 賬戶,需要保證 SMTP 服務開啓

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.qq.com"/>
        <property name="port" value="465"/>
        <property name="defaultEncoding" value="utf-8"/>
        <property name="username" value="你的郵箱地址"/>
        <property name="password" value="你的郵箱授權碼(不是郵箱密碼)"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.sendpartial">true</prop>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.socketFactory.port">465</prop>
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
            </props>
        </property>
    </bean>
    <bean class="com.amwalle.walle.util.Mail">
        <property name="mailSender" ref="mailSender"/>
    </bean>
</beans>

3. 加載bean配置信息

實現了一個BeanConfig類:

package com.amwalle.walle.bean;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource(locations={"classpath:/application-bean.xml"})
public class BeanConfig {
}

4. 郵件發送類

簡單實現了一個郵件發送的類,其中包含發送郵件方法 sendMail:

package com.amwalle.walle.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.internet.MimeMessage;

public class Mail {
    private static final Logger logger = LoggerFactory.getLogger(Mail.class);

    private static JavaMailSenderImpl mailSender;

    public static void sendMail(String title, String html, String to) {
        try {
            MimeMessage msg = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(msg, true);
            helper.setFrom(mailSender.getUsername());
            helper.setTo(to);
            helper.setSubject(title);
            helper.setText(html, true);
            mailSender.send(msg);
        } catch (Exception e) {
            logger.error("sendMail error", e);
        }
    }

    public void setMailSender(JavaMailSenderImpl mailSender) {
        Mail.mailSender = mailSender;
    }

    public JavaMailSenderImpl getMailSender() {
        return mailSender;
    }
}

5. 測試郵件發送

調用郵件發送,檢查是否發送成功:

package com.amwalle.walle.controller;

import com.amwalle.walle.util.Mail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class HelloWorldController {
    private static final Logger logger = LoggerFactory.getLogger(HelloWorldController.class);

    @RequestMapping(value = "/walle", method = RequestMethod.GET)
    public String helloWorld() {
        logger.info("--------test-------");

        Mail.sendMail("test","test", "接收郵箱地址");

        return "hello world";
    }
}

附我的工程目錄,需要修改的就是圈出來的這幾個:

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