最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實現(xiàn)發(fā)送郵件功能的三種方式

 更新時間:2025年07月15日 10:28:23   作者:白露與泡影  
本文詳細介紹了如何在SpringBoot應(yīng)用中使用JavaMailSender、JavaMailAPI和ApacheCommonsEmail庫發(fā)送郵件,對比了它們的優(yōu)缺點,并提供了示例代碼和配置指導(dǎo),需要的朋友可以參考下

SpringBoot 發(fā)送郵件的三種方式

  • Spring Framework提供的JavaMailSender(與 Spring 集成,推薦)
  • 使用JavaMail API來發(fā)送郵件(靈活,支持發(fā)送日程提醒)
  • Apache Commons Email 庫(簡便)

選擇哪一種方案

  • 如果你的項目已經(jīng)使用了Spring框架,并且只需進行基本的郵件發(fā)送,那么使用JavaMailSender可能是一個方便的選擇。
  • 如果你對郵件發(fā)送有較高的控制要求,或者需要滿足一些特殊場景的需求,那么直接使用JavaMail API可能更為合適。
  • 如果你希望在簡潔的API和靈活性之間取得平衡,并且不介意引入外部庫,那么Apache Commons Email庫可能是一個中間的選擇。

這里對比一下Spring Framework提供的JavaMailSender、使用JavaMail API、以及Apache Commons Email庫的優(yōu)缺點:

1. JavaMailSender (Spring Framework)

優(yōu)點:

  • 集成性高: JavaMailSender是 Spring 的一部分,與Spring框架的其他部分緊密集成,可以方便地與Spring的其他功能一起使用。
  • 配置簡單: Spring Boot 提供了自動配置,減少了配置的繁瑣性。
  • 簡化API: Spring 提供了更高層次的抽象,簡化了發(fā)送郵件的過程,使得代碼更加清晰和簡潔。

缺點:

  • 靈活性較低: 對于一些特定和高級的需求,可能需要更直接地使用JavaMail API或其他庫,因為Spring的抽象可能無法滿足所有場景。
  • 較大的依賴: 如果你只是需要發(fā)送郵件,引入整個Spring框架可能會顯得過于龐大,特別是對于一些小型項目。

2. JavaMail API

優(yōu)點:

  • 靈活性高: JavaMail API 提供了更底層、更直接的控制,可以滿足各種郵件發(fā)送需求。
  • 標準化: JavaMail API 是Java標準庫的一部分,可移植性好,與Java平臺集成度高。

缺點:

  • 繁瑣: 使用JavaMail API編寫代碼可能較為繁瑣,需要更多的代碼量,尤其是對于一些簡單的郵件發(fā)送場景。
  • 學(xué)習(xí)曲線: 對于新手來說,學(xué)習(xí)JavaMail API可能需要一些時間。

3. Apache Commons Email庫

優(yōu)點:

  • 簡化API: Apache Commons Email 庫提供了更簡單的API,相比JavaMail API,可以更容易地發(fā)送各種類型的電子郵件,包括HTML郵件等。
  • 減少樣板代碼: 相比JavaMail API,Apache Commons Email庫可以減少一些樣板代碼,使得代碼更加簡潔。

缺點:

  • 不如 JavaMail API靈活: 雖然簡化了API,但相比JavaMail API,Apache Commons Email 庫可能在某些高級場景下的靈活性有所減弱。
  • 依賴: 引入外部庫可能增加項目的依賴。

JavaMailSender 示例

以下是一個簡單的Spring Boot郵件發(fā)送的示例代碼:

首先,確保你的Spring Boot項目中包含了Spring Boot Starter Mail庫。在pom.xml中添加以下依賴:

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

然后,創(chuàng)建一個服務(wù)類來處理郵件發(fā)送:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
 
@Service
public class EmailService {
 
    @Autowired
    private JavaMailSender javaMailSender;
 
    public void sendEmail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
 
        javaMailSender.send(message);
    }
}
 

接下來,在你的應(yīng)用程序中,你可以使用EmailService類來發(fā)送電子郵件。以下是一個簡單的示例控制器:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/email")
public class EmailController {
 
    @Autowired
    private EmailService emailService;
 
    @GetMapping("/send")
    public String sendEmail(@RequestParam String to, @RequestParam String subject, @RequestParam String text) {
        emailService.sendEmail(to, subject, text);
        return "Email sent successfully!";
    }
}
 

在上述代碼中,通過調(diào)用sendEmail方法,你可以發(fā)送一封包含指定主題和文本內(nèi)容的電子郵件。

確保在application.propertiesapplication.yml文件中配置SMTP服務(wù)器的相關(guān)信息,例如:

  mail:
    host: smtp.163.com
    username: 郵箱名字
    password: 郵箱密碼或者密鑰
    port: 465
    protocol: smtp
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
          ssl:
            enable: true
          socketFactory:
            port: 465
            class: javax.net.ssl.SSLSocketFactory

可以用 swagger 測試請求,也可以用 postman 工具測試。

測試結(jié)果如下:

使用JavaMail API來發(fā)送郵件

在Spring Boot應(yīng)用程序中使用JavaMail API發(fā)送電子郵件。

添加依賴

在你的pom.xml文件中,添加以下依賴:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

郵箱配置

確保在application.propertiesapplication.yml文件中配置SMTP服務(wù)器的相關(guān)信息,例如:

  mail:
    host: smtp.163.com
    username: 郵箱名字
    password: 郵箱密碼或者密鑰
    port: 465
    protocol: smtp
    default-encoding: utf-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true
          ssl:
            enable: true
          socketFactory:
            port: 465
            class: javax.net.ssl.SSLSocketFactory

編寫發(fā)送郵件的代碼

使用JavaMail API發(fā)送電子郵件。以下是一個簡單的例子:

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
 
@Service
public class EmailService {
 
    @Value("${spring.mail.username}")
    private String from;
 
    @Autowired
    private JavaMailSender javaMailSender;
 
    public void sendSimpleEmail(String to, String subject, String text) throws MessagingException {
        Properties properties = new Properties();
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.host", "your_smtp_host");
        properties.put("mail.smtp.port", "your_smtp_port");
 
        Session session = Session.getInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(from, "your_email_password");
            }
        });
 
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        message.setSubject(subject);
        message.setText(text);
 
        Transport.send(message);
    }
}
 

使用服務(wù)類發(fā)送郵件:

@RestController
@RequestMapping("/email")
public class EmailController {
 
    @Autowired
    private EmailService emailService;
 
    @GetMapping("/send")
    public String sendEmail(@RequestParam String to, @RequestParam String subject, @RequestParam String text) {
        try {
            emailService.sendSimpleEmail(to, subject, text);
            return "Email sent successfully!";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "Failed to send email.";
        }
    }
}
 

Apache Commons Email 庫

添加依賴:

在你的pom.xml文件中,添加 Apache Commons Email庫的依賴:

xmlCopy code
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-email</artifactId>
    <version>1.5</version> <!-- 替換為最新版本 -->
</dependency>

確保這個依賴被正確地添加到你的項目中。

配置SMTP服務(wù)器:

在你的application.propertiesapplication.yml文件中配置SMTP服務(wù)器的相關(guān)信息,例如:

propertiesCopy code
spring.mail.host=your_smtp_host
spring.mail.port=your_smtp_port
spring.mail.username=your_email@gmail.com
spring.mail.password=your_email_password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

編寫發(fā)送郵件的代碼

創(chuàng)建一個服務(wù)類,使用Apache Commons Email庫發(fā)送電子郵件。以下是一個簡單的例子:

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
@Service
public class EmailService {
 
    @Value("${spring.mail.username}")
    private String from;
 
    public void sendSimpleEmail(String to, String subject, String text) throws EmailException {
        SimpleEmail email = new SimpleEmail();
        email.setHostName("your_smtp_host");
        email.setSmtpPort(Integer.parseInt("your_smtp_port"));
        email.setAuthenticator(new DefaultAuthenticator(from, "your_email_password"));
        email.setStartTLSEnabled(true);
 
        email.setFrom(from);
        email.addTo(to);
        email.setSubject(subject);
        email.setMsg(text);
 
        email.send();
    }
}

使用服務(wù)類發(fā)送郵件

在你的控制器或其他地方調(diào)用EmailService發(fā)送郵件:

javaCopy code
@RestController
@RequestMapping("/email")
public class EmailController {
 
    @Autowired
    private EmailService emailService;
 
    @GetMapping("/send")
    public String sendEmail(@RequestParam String to, @RequestParam String subject, @RequestParam String text) {
        try {
            emailService.sendSimpleEmail(to, subject, text);
            return "Email sent successfully!";
        } catch (EmailException e) {
            e.printStackTrace();
            return "Failed to send email.";
        }
    }
}

這樣,你就可以使用Apache Commons Email庫發(fā)送郵件了。確保替換配置中的實際值,并根據(jù)你的需求進行定制。

以上就是SpringBoot實現(xiàn)發(fā)送郵件功能的三種方式的詳細內(nèi)容,更多關(guān)于SpringBoot發(fā)送郵件方式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實現(xiàn)非對稱加密的三種方法

    Java實現(xiàn)非對稱加密的三種方法

    本文主要介紹了Java實現(xiàn)非對稱加密的三種方法,主要包括非對稱加密算法--DH(密鑰交換),非對稱加密算法--RSA,非對稱加密算法--EIGamal,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • SpringBoot Docker鏡像分層的優(yōu)化指南

    SpringBoot Docker鏡像分層的優(yōu)化指南

    關(guān)于如何優(yōu)化SpringBoot應(yīng)用程序的Docker鏡像構(gòu)建 的,核心思想是:不要簡單地把一個胖JAR包直接扔進Docker鏡像里運行,而應(yīng)該利用分層技術(shù)來提升鏡像的構(gòu)建效率和部署性能,所以本文給大家介紹了SpringBoot Docker鏡像分層的優(yōu)化指南,需要的朋友可以參考下
    2025-10-10
  • Java concurrency集合之LinkedBlockingDeque_動力節(jié)點Java學(xué)院整理

    Java concurrency集合之LinkedBlockingDeque_動力節(jié)點Java學(xué)院整理

    LinkedBlockingDeque是雙向鏈表實現(xiàn)的雙向并發(fā)阻塞隊列。該阻塞隊列同時支持FIFO和FILO兩種操作方式,即可以從隊列的頭和尾同時操作(插入/刪除);并且,該阻塞隊列是支持線程安全。
    2017-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之ArrayList從順序表到實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之ArrayList從順序表到實現(xiàn)

    Java中的ArrayList是一種基于數(shù)組實現(xiàn)的數(shù)據(jù)結(jié)構(gòu),支持動態(tài)擴容和隨機訪問元素,可用于實現(xiàn)順序表等數(shù)據(jù)結(jié)構(gòu)。ArrayList在內(nèi)存中連續(xù)存儲元素,支持快速的隨機訪問和遍歷。通過學(xué)習(xí)ArrayList的實現(xiàn)原理和使用方法,可以更好地掌握Java中的數(shù)據(jù)結(jié)構(gòu)和算法
    2023-04-04
  • RabbitMQ工作隊列模式的使用解析

    RabbitMQ工作隊列模式的使用解析

    文章介紹了RabbitMQ工作隊列模式,通過多消費者競爭消費消息實現(xiàn)負載均衡,對比簡單模式突出其分布式處理優(yōu)勢,詳解輪詢與公平分發(fā)策略,并提供環(huán)境配置、生產(chǎn)消費代碼示例及運行分析,最后強調(diào)消息確認、持久化和動態(tài)擴容等使用技巧
    2025-08-08
  • java垃圾收集器與內(nèi)存分配策略詳解

    java垃圾收集器與內(nèi)存分配策略詳解

    本篇文章主要介紹了Java垃圾收集器與內(nèi)存分配策略的方法和原理總結(jié),Java垃圾回收器是Java虛擬機的重要模塊,具有一定的參考價值,有興趣的可以了解一下
    2021-08-08
  • Java中Queue以及Deque用法示例詳解

    Java中Queue以及Deque用法示例詳解

    在Java集合框架中Queue和Deque接口是兩種重要的數(shù)據(jù)結(jié)構(gòu),它們用于存儲和管理元素序列,這篇文章主要介紹了Java中Queue以及Deque用法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài)知識點是學(xué)習(xí)java必備的基礎(chǔ)知識,看似簡單,真正理解起來還是有一定難度的,今天小編再次通過實例代碼給大家講解java 封裝繼承多態(tài)知識,感興趣的朋友一起學(xué)習(xí)下吧
    2021-05-05
  • Java實現(xiàn)多線程斷點下載

    Java實現(xiàn)多線程斷點下載

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多線程斷點下載的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問題

    解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問題

    本文主要介紹了解決SpringBoot中LocalDateTime返回前端數(shù)據(jù)為數(shù)組結(jié)構(gòu)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03

最新評論

山丹县| 锡林浩特市| 朔州市| 澄江县| 陵水| 汽车| 澄江县| 灌阳县| 三江| 武夷山市| 贺兰县| 永丰县| 钟祥市| 华阴市| 乌拉特中旗| 临沧市| 正宁县| 耿马| 西乌珠穆沁旗| 车险| 香河县| 永寿县| 油尖旺区| 绍兴市| 科技| 酒泉市| 鄱阳县| 旌德县| 临武县| 南丰县| 晋州市| 邹城市| 靖安县| 革吉县| 汝阳县| 九龙城区| 黄梅县| 宁陕县| 惠安县| 连州市| 哈尔滨市|