回覆列表
  • 1 # 路人宅

    這是我寫的Spring boot教程,參考Spring Boot傳送郵件資料:

    https://blog.yoodb.com/yoodb/article/detail/1427

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。透過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。

  • 2 # 五星村小黃

    Spring提供了非常好用的JavaMailSender介面實現郵件傳送,在Spring Boot中也提供了相應的自動化配置。

    傳送郵件

    1,在pom.xml中引入spring-boot-starter-mail依賴:

    <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-mail</artifactId>

    </dependency>

    2,在application.properties中配置相應的屬性:(我這裡模擬的是163郵箱給QQ郵箱傳送郵件)

    spring.mail.host=smtp.163.com

    spring.mail.username=郵箱使用者名稱 so****@163.com

    spring.mail.password=郵箱密碼

    spring.mail.default-encoding=UTF-8

    3,寫傳送郵件的測試類

    @RestController

    @RequestMapping("/mail")

    public class MailController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired

    private JavaMailSender mailSender;

    @RequestMapping("/send")

    public void sendMail(){

    SimpleMailMessage message = new SimpleMailMessage();

    message.setFrom("so***@163.com");

    message.setTo("239***@qq.com");

    message.setSubject("it is a test for spring boot");

    message.setText("你好,我是小黃,我正在測試傳送郵件。");

    try {

    mailSender.send(message);

    logger.info("小黃的測試郵件已傳送。");

    } catch (Exception e) {

    logger.error("小黃髮送郵件時發生異常了!", e);

    }

    }

    }

    4,執行啟動類

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

    @EnableAutoConfiguration

    @MapperScan("cn.yideng.*.dao")

    public class DemoApplication {

    public static void main(String[] args) {

    SpringApplication.run(DemoApplication.class, args);

    }

    }

    5,瀏覽器執行 http://localhost:8080/mail/send

    6,登入163郵箱,在傳送箱裡檢視

    7,登入QQ郵箱,在收件箱裡檢視

    可以看出Spring Boot的starter模組提供了自動化配置,在引入了spring-boot-starter-mail依賴之後,會根據配置檔案中的內容去建立JavaMailSender例項,因此我們可以直接在需要使用的地方直接@Autowired來引入 JavaMailSender 郵件傳送物件。

    當然在實際使用過程中,不會這麼簡單的,我們可能會要求帶上附件、或使用郵件模組等。這時我們就需要使用MimeMessage來設定更復雜的右鍵內容,下面就來看看怎麼實現它。

    傳送帶附件的郵件

    測試類 : 還是模擬 163郵箱 給QQ郵箱傳送郵件

    @RestController

    @RequestMapping("/mail")

    public class AttachmentsMailController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired

    private JavaMailSender mailSender;

    @RequestMapping("/att")

    public void sendMail() throws MessagingException{

    MimeMessage mimeMessage = mailSender.createMimeMessage();

    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

    helper.setFrom("so***@163.com");

    helper.setTo("239**@qq.com");

    helper.setSubject("主題:傳送有附件的郵件");

    helper.setText("你好,我是小黃,我正在測試傳送一封有附件的郵件。");

    FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

    FileSystemResource file2 = new FileSystemResource(new File("d:\\java-1.jpg"));

    helper.addAttachment("附件-1.jpg", file1);

    helper.addAttachment("附件-2.jpg", file2);

    try {

    mailSender.send(mimeMessage);

    logger.info("小黃的測試帶附件的郵件已傳送。");

    } catch (Exception e) {

    logger.error("小黃髮送帶附件郵件時發生異常了!", e);

    }

    }

    }

    2,需要 在D盤下準備兩張圖片cat.jpg java-1.jpg

    3,瀏覽器執行 http://localhost:8080/mail/att

    4,登入163郵箱,在傳送箱裡檢視,如下圖

    5,登入QQ郵箱,在收件箱裡檢視,如下圖

    嵌入靜態資源的郵件

    還有一種是透過嵌入圖片等靜態資源,可以直接看到圖片,而不用從附近中檢視具體的圖片,來看看吧。

    測試類:

    @RestController

    @RequestMapping("/mail")

    public class StaticResourceMailController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired

    private JavaMailSender mailSender;

    @RequestMapping("/static")

    public void sendMail() throws MessagingException{

    MimeMessage mimeMessage = mailSender.createMimeMessage();

    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

    helper.setFrom("so**@163.com");

    helper.setTo("239***@qq.com");

    helper.setSubject("主題:嵌入靜態資源");

    helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);

    // 注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應起來

    FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

    helper.addInline("hello", file1);

    try {

    mailSender.send(mimeMessage);

    logger.info("小黃的測試嵌入靜態資源的郵件已傳送。");

    } catch (Exception e) {

    logger.error("小黃髮送嵌入靜態資源的郵件時發生異常了!", e);

    }

    }

    }

    要特別注意addInline()中資源名稱 hello 必須與 text正文中cid:hello對應

    2,需要 在D盤下準備兩張圖片cat.jpg

    3,瀏覽器執行 http://localhost:8080/mail/static

    4,登入163郵箱,在傳送箱裡檢視,如下圖

    5,登入QQ郵箱,在收件箱裡檢視,如下圖

  • 中秋節和大豐收的關聯?
  • 考神傷退,33歲全明星中鋒示好湖人,早年曾指著詹姆斯鼻子罵,你怎麼看?