首頁 > Java > java教程 > 主體

在 Spring Boot 中建立同步電子郵件通知系統:逐步指南

PHPz
發布: 2024-09-08 18:30:33
原創
475 人瀏覽過

探索 Spring Boot 應用程式中同步電子郵件傳送的基礎

Building Synchronous Email Notification Systems in Spring Boot: A Step-by-Step Guide

在當今快節奏的數位世界中,及時溝通對於任何應用程式都至關重要。無論是密碼重設、歡迎訊息或訂單確認,電子郵件通知在增強用戶體驗方面都發揮著至關重要的作用。作為開發人員,我們經常發現自己遇到這樣的情況:從 Spring Boot 應用程式發送電子郵件通知不僅是一項要求,而且是必要的。

在本部落格系列中,我將引導您完成在 Spring Boot 應用程式中實現電子郵件通知的過程。我們將從基礎知識開始—使用同步方法發送電子郵件。此方法可確保在執行請求期間立即發送電子郵件,為使用者提供即時回饋。

雖然同步方法實施起來很簡單,並且對於小型應用程式也很有效,但了解其限制非常重要,特別是在效能可能受到影響的高流量環境中。

在這一部分中,我們將重點放在設定項目、配置必要的依賴項以及編寫程式碼來發送基本的電子郵件通知。在本文結束時,您將擁有一個能夠同步發送電子郵件的工作 Spring Boot 應用程序,為本系列後續部分中的更高級主題奠定基礎。

項目設定

Building Synchronous Email Notification Systems in Spring Boot: A Step-by-Step Guide

設定依賴關係

Building Synchronous Email Notification Systems in Spring Boot: A Step-by-Step Guide

pom.xml 檔案中的依賴項

Spring Boot 入門資料 JPA

神器:spring-boot-starter-data-jpa
描述:此依賴項使用 JPA (Java Persistence API) 簡化了資料持久性。它提供了與資料庫互動所需的一切,包括實體、儲存庫和事務。在此專案中,它允許您輕鬆地從 MySQL 資料庫中保存和檢索使用者資料(例如電子郵件日誌、使用者資訊)。

Spring Boot 入門郵件

神器:spring-boot-starter-mail
描述:此啟動器允許從 Spring Boot 應用程式發送電子郵件。它包括必要的元件,例如 JavaMailSender,用於配置和發送註冊和訂單確認等用戶活動的即時電子郵件通知。

*Spring Boot 入門網站
*

神器:spring-boot-starter-web
描述:此相依性可協助您建立 RESTful Web 服務並提供 Web 內容。它引入了 Spring MVC 等基本函式庫來建立 API。在此專案中,它允許建立端點以透過 HTTP 請求觸發電子郵件通知。

MySQL 連接器

神器:mysql-connector-j
說明:這是將 Spring Boot 應用程式連接到 MySQL 資料庫所需的 JDBC 驅動程式。它允許應用程式與資料庫互動並執行讀取和寫入資料等操作,例如儲存電子郵件日誌或使用者資訊。

龍目島

神器:龍目島
描述:Lombok 是一個方便的函式庫,它透過自動產生 getter、setter 和建構子等常用方法來減少樣板程式碼。在本專案中它被標記為可選,它的使用可以簡化 User 或 EmailLog 等資料模型的程式碼。

Spring Boot 入門測驗

神器:spring-boot-starter-test
描述:此依賴項為 Spring Boot 應用程式提供了全面的測試框架。它包括用於單元和整合測試的 JUnit、Mockito 和 Spring Test 等庫。它有助於確保您的電子郵件通知系統透過自動化測試按預期工作。

Spring Boot Maven 外掛程式

神器:spring-boot-maven-plugin
描述:該插件可讓您從 Maven 命令建置和執行 Spring Boot 應用程式。它簡化了將專案打包到可執行 JAR 檔案的過程,使部署更加容易。如有必要,它會從建置過程中排除 Lombok 依賴項。

配置應用程式屬性

要將 Spring Boot 應用程式連接到電子郵件伺服器,您可以使用必要的 SMTP 設定來設定 application.properties 或 application.yml 檔案。以下是每種配置格式的範例。

對於 application.properties

spring.application.name=Synchronous-Email-Notifier
server.port=8080

spring.datasource.url=jdbc:mysql://localhost:3306/synchronous_email_notifier
spring.datasource.username=root
spring.datasource.password=ayush@123

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=shri@gmail.com
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
登入後複製

Untuk aplikasi.yml

spring:
  mail:
    host: smtp.example.com
    port: 587
    username: your-email@example.com
    password: your-email-password
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

登入後複製

Hos: Ini ialah alamat pelayan SMTP. Gantikan smtp.example.com dengan alamat pembekal SMTP sebenar anda (cth., smtp.gmail.com untuk Gmail atau smtp.mail.yahoo.com untuk Yahoo).

Port: Port 587 biasanya digunakan untuk menghantar e-mel melalui TLS (Transport Layer Security). Jika pembekal e-mel anda menyokong SSL, anda boleh menggunakan port 465.

Nama Pengguna: Alamat e-mel dari mana anda akan menghantar e-mel. Pastikan anda menggantikannya dengan akaun e-mel sebenar.

Kata Laluan: Kata laluan untuk akaun e-mel anda. Atas sebab keselamatan, jika anda menggunakan perkhidmatan seperti Gmail, adalah disyorkan untuk menggunakan Kata Laluan Apl dan bukannya kata laluan akaun sebenar anda. Juga, pertimbangkan untuk menggunakan pembolehubah persekitaran untuk maklumat sensitif seperti kata laluan.

Pengesahan SMTP: Ini membolehkan pengesahan untuk pelayan SMTP anda, yang diperlukan apabila pembekal e-mel anda memerlukan nama pengguna dan kata laluan yang sah.

STARTTLS: Ini memastikan sambungan ke pelayan e-mel disulitkan menggunakan TLS. Ini penting untuk komunikasi yang selamat.

Persediaan Projek

Building Synchronous Email Notification Systems in Spring Boot: A Step-by-Step Guide

User.java untuk menyimpan mel pengguna dan maklumat lain ke pangkalan data di sini, kami menghantar e-mel kepada semua pengguna yang terdapat di dalam pangkalan data.

@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;
    private String email;
    private String phoneNumber;
}
登入後複製

UserService.java

public interface UserService {
    public void saveUser(User user);
}
登入後複製

UserServiceImpl.java

public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public void saveUser(User user) {
        userRepository.save(user);
    }
}

登入後複製

EmailController.java

@RestController
@RequestMapping("/api/email")
public class EmailController {

    @Autowired
    EmailService emailService;

    @Autowired
    UserService userService;

    @PostMapping("/saveUser")
    public String saveUser(@RequestBody User user) {
        userService.saveUser(user);
        return "User saved successfully";
    }
}

登入後複製

Antaramuka EmailService mentakrifkan kontrak untuk menghantar e-mel dalam aplikasi Java. Ia mengandungi kaedah sendEmail, yang mengambil tiga parameter: alamat e-mel penerima (ke), subjek e-mel (subjek) dan kandungan e-mel (badan). Melaksanakan antara muka ini membolehkan penyepaduan mudah untuk pemberitahuan e-mel.

package com.ayshriv.Synchronous_Email_Notifier.service;

public interface EmailService {
    void sendEmail(String to, String subject,String body);
}

登入後複製

Kelas EmailServiceImpl ini melaksanakan antara muka EmailService dan menyediakan fungsi untuk menghantar e-mel menggunakan JavaMailSender Spring. Ia menggunakan SimpleMailMessage untuk menetapkan penerima (ke), subjek (subjek), dan badan (teks). javaMailSender disuntik secara automatik menggunakan anotasi @Autowired Spring. Jika sebarang pengecualian berlaku semasa proses penghantaran e-mel, ia akan ditangkap dan dilog ke konsol.

package com.ayshriv.Synchronous_Email_Notifier.service.impl;

import com.ayshriv.Synchronous_Email_Notifier.service.EmailService;
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 EmailServiceImpl implements EmailService {
    @Autowired
    private JavaMailSender javaMailSender;

    public void sendEmail(String to, String subject,String body)
    {
        try {
            SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
            simpleMailMessage.setTo(to);
            simpleMailMessage.setSubject(subject);
            simpleMailMessage.setText(body);
            javaMailSender.send(simpleMailMessage);
        }
        catch (Exception exception)
        {
            System.out.println(exception.getMessage());
        }
    }
}

登入後複製

Kelas EmailScheduler ini ialah perkhidmatan Spring yang menggunakan tugas berjadual untuk menghantar e-mel kepada semua pengguna dalam pangkalan data pada selang masa yang tetap. Kelas berfungsi seperti berikut:

Ia menggunakan @Scheduled dengan ungkapan cron ("0 0/1 * 1/1 * ?") untuk menjalankan kaedah fetchUsersAndSendEmail setiap minit.
Kaedah ini mendapatkan semula senarai semua pengguna daripada UserRepository dan menghantar e-mel kepada setiap pengguna menggunakan EmailService.
Setiap e-mel yang dihantar mempunyai subjek "Teks Demo untuk e-mel" dan badan "Demo".

package com.ayshriv.Synchronous_Email_Notifier.schduler;

import com.ayshriv.Synchronous_Email_Notifier.entity.User;
import com.ayshriv.Synchronous_Email_Notifier.repository.UserRepository;
import com.ayshriv.Synchronous_Email_Notifier.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmailScheduler {
    @Autowired
    private UserRepository userRepository;

    @Autowired
    private EmailService emailService;

    @Scheduled(cron = "0 0/1 * 1/1 * ?")
    public void fetchUsersAndSendEmail()
    {
        List<User> users = userRepository.findAll();
        for (User user:users)
        {
            emailService.sendEmail(user.getEmail(),"Demo text for email","Demo");
        }
    }
}

登入後複製

Kelas EmailScheduler dalam projek Pemberitahu E-mel Segerak mengautomasikan penghantaran e-mel pemasaran kepada pengguna pada selang waktu tertentu. Menggunakan anotasi @Scheduled Spring, ia menjalankan tugas setiap minit, mendapatkan semula semua pengguna daripada UserRepository dan menghantar e-mel melalui EmailService. Persediaan ini sesuai untuk perniagaan mengautomasikan penghantaran e-mel pemasaran, surat berita atau pemberitahuan penting tanpa campur tangan manual. Jadual boleh dilaraskan menggunakan ungkapan cron, membenarkan fleksibiliti dalam menghantar e-mel setiap hari, mingguan atau pada sebarang kekerapan tersuai, menjadikannya alat yang berkuasa untuk kempen e-mel berasaskan masa.

Simpan Pengguna

Building Synchronous Email Notification Systems in Spring Boot: A Step-by-Step Guide

Kesimpulan

Kelas EmailScheduler dalam projek Pemberitahu E-mel Segerak menunjukkan cara yang praktikal dan cekap untuk mengautomasikan proses penghantaran e-mel kepada pengguna. Dengan memanfaatkan anotasi @Scheduled Spring Boot dan fleksibiliti ungkapan cron, kelas ini menjadualkan tugas menghantar e-mel untuk dijalankan setiap minit. UserRepository mengambil semua rekod pengguna, manakala EmailService memastikan setiap pengguna menerima e-mel dengan kandungan yang dipratakrifkan.

Pendekatan ini sangat berguna untuk tujuan pemasaran, di mana perniagaan perlu menghantar e-mel berkala seperti surat berita, tawaran promosi atau pemberitahuan pada selang masa tertentu. Persediaan memastikan bahawa e-mel dihantar secara konsisten kepada semua pengguna tanpa usaha manual. Automasi ini mengurangkan masa dan usaha yang terlibat dalam proses komunikasi sambil membenarkan pemasar menumpukan pada mencipta kempen yang berkesan.

Keupayaan untuk menyesuaikan kekerapan e-mel ini, seperti menghantarnya setiap hari, mingguan atau bulanan, menjadikan ini alat serba boleh untuk kempen pemasaran. Tambahan pula, anda boleh mengubah suai kandungan secara dinamik untuk menyesuaikan pemesejan untuk pengguna atau acara yang berbeza. Secara keseluruhan, penyelesaian ini memudahkan dan memperkemas proses e-mel pemasaran berjadual, menjadikannya berskala dan boleh disesuaikan dengan pelbagai keperluan perniagaan.

Anda boleh mengakses kod sumber penuh projek Pemberitahu E-mel Segerak di GitHub. https://github.com/ishrivasayush/email-scheduling-application.git

Projek ini menunjukkan cara menggunakan Spring Boot untuk mengautomasikan e-mel pemasaran dengan penjadual. Jangan ragu untuk meneroka dan menyumbang!

以上是在 Spring Boot 中建立同步電子郵件通知系統:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!