Java java지도 시간 Spring Boot에서 동기 이메일 알림 시스템 구축: 단계별 가이드

Spring Boot에서 동기 이메일 알림 시스템 구축: 단계별 가이드

Sep 08, 2024 pm 06:30 PM

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 웹 서비스를 구축하고 웹 콘텐츠를 제공하는 데 도움이 됩니다. API 생성을 위해 Spring MVC와 같은 필수 라이브러리를 가져옵니다. 이 프로젝트에서는 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
로그인 후 복사

對於 application.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

로그인 후 복사

主機:這是 SMTP 伺服器位址。將 smtp.example.com 替換為您的實際 SMTP 提供者的位址(例如,對於 Gmail,smtp.gmail.com 或對於 Yahoo,smtp.mail.yahoo.com)。

連接埠:連接埠 587 通常用於透過 TLS(傳輸層安全)傳送電子郵件。如果您的電子郵件提供者支援 SSL,您可以使用連接埠 465。

使用者名稱:您發送電子郵件的電子郵件地址。請務必將其替換為實際的電子郵件帳戶。

密碼:您的電子郵件帳號的密碼。出於安全原因,如果您使用 Gmail 等服務,建議使用應用程式密碼而不是實際帳戶密碼。另外,請考慮使用環境變數來儲存密碼等敏感資訊。

SMTP 驗證:這可以對您的 SMTP 伺服器進行身份驗證,當您的電子郵件提供者需要有效的使用者名稱和密碼時,這是必需的。

STARTTLS:這可確保與電子郵件伺服器的連線使用 TLS 加密。這對於安全通訊至關重要。

項目設定

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

User.java 用於將使用者郵件和其他資訊儲存到資料庫中,我們將電子郵件傳送給資料庫中存在的所有使用者。

@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";
    }
}

로그인 후 복사

EmailService 介面定義了在 Java 應用程式中發送電子郵件的契約。它包含一個方法sendEmail,該方法接受三個參數:收件者的電子郵件地址(to)、電子郵件主題(subject)和電子郵件內容(body)。實現此介面可以輕鬆整合電子郵件通知。

package com.ayshriv.Synchronous_Email_Notifier.service;

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

로그인 후 복사

這個EmailServiceImpl類別實作了EmailService介面並提供了使用Spring的JavaMailSender發送電子郵件的功能。它使用 SimpleMailMessage 設定收件者 (to)、主題 (subject) 和正文 (text)。 javaMailSender 是使用 Spring 的 @Autowired 註解自動注入的。如果在電子郵件傳送過程中出現任何異常,它們會被捕獲並記錄到控制台。

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());
        }
    }
}

로그인 후 복사

這個EmailScheduler類別是一個Spring服務,它使用排程任務定期向資料庫中的所有使用者發送電子郵件。該類別的工作原理如下:

它使用 @Scheduled 和 cron 表達式(“0 0/1 * 1/1 * ?”)每分鐘執行 fetchUsersAndSendEmail 方法。
此方法從 UserRepository 中擷取所有使用者的列表,並使用 EmailService 向每個使用者發送一封電子郵件。
每封發送的電子郵件都有「電子郵件簡報文字」主題和「演示」正文。

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");
        }
    }
}

로그인 후 복사

同步電子郵件通知程式項目中的 EmailScheduler 類別可自動以特定時間間隔向使用者發送行銷電子郵件。使用Spring的@Scheduled註釋,它每分鐘執行一個任務,從UserRepository中檢索所有使用者並透過EmailService發送電子郵件。此設定非常適合企業自動發送行銷電子郵件、新聞通訊或重要通知,無需人工幹預。可以使用 cron 表達式調整計劃,從而可以靈活地每天、每週或以任何自訂頻率發送電子郵件,使其成為基於時間的電子郵件活動的強大工具。

儲存用戶

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

結論

同步電子郵件通知程式專案中的 EmailScheduler 類別示範了一種實用且有效的方法來自動執行向使用者發送電子郵件的過程。透過利用 Spring Boot 的 @Scheduled 註解和 cron 表達式的靈活性,此類安排電子郵件發送任務每分鐘運行一次。 UserRepository 會取得所有使用者記錄,而 EmailService 可確保每位使用者收到一封包含預先定義內容的電子郵件。

這種方法對於行銷目的非常有用,企業需要定期發送電子郵件,例如時事通訊、促銷優惠或以特定時間間隔發送通知。此設定可確保電子郵件一致地傳送給所有用戶,無需手動操作。這種自動化減少了溝通過程中涉及的時間和精力,同時使行銷人員能夠專注於制定有效的行銷活動。

自訂這些電子郵件的頻率的能力,例如每天、每週或每月發送,使其成為行銷活動的多功能工具。此外,您可以動態修改內容,以針對不同使用者或場合自訂訊息傳遞。總體而言,該解決方案簡化了預定行銷電子郵件的流程,使其具有可擴展性並能夠適應各種業務需求。

您可以在 GitHub 上存取同步電子郵件通知程式專案的完整原始碼。 https://github.com/ishrivasayush/email-scheduling-application.git

專案示範如何使用 Spring Boot 透過排程器自動傳送行銷電子郵件。歡迎探索並貢獻!

위 내용은 Spring Boot에서 동기 이메일 알림 시스템 구축: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? 회사의 보안 소프트웨어가 응용 프로그램이 실행되지 않습니까? 문제 해결 및 해결 방법은 무엇입니까? Apr 19, 2025 pm 04:51 PM

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? 분류를 구현하고 그룹의 일관성을 유지하기 위해 이름을 숫자로 변환하려면 어떻게합니까? Apr 19, 2025 pm 11:30 PM

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? 맵 구조를 사용하여 시스템 도킹에서 필드 매핑 문제를 단순화하는 방법은 무엇입니까? Apr 19, 2025 pm 06:21 PM

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? 데이터베이스 쿼리 조건을 구축하기 위해 엔티티 클래스 변수 이름을 우아하게 얻는 방법은 무엇입니까? Apr 19, 2025 pm 11:42 PM

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Intellij Idea는 로그를 출력하지 않고 스프링 부팅 프로젝트의 포트 번호를 어떻게 식별합니까? Apr 19, 2025 pm 11:45 PM

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Java 객체를 어레이로 안전하게 변환하는 방법은 무엇입니까? Apr 19, 2025 pm 11:33 PM

Java 객체 및 배열의 ​​변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

전자 상거래 플랫폼 SKU 및 SPU 데이터베이스 설계 : 사용자 정의 속성과 귀속없는 제품을 모두 고려하는 방법은 무엇입니까? 전자 상거래 플랫폼 SKU 및 SPU 데이터베이스 설계 : 사용자 정의 속성과 귀속없는 제품을 모두 고려하는 방법은 무엇입니까? Apr 19, 2025 pm 11:27 PM

전자 상거래 플랫폼에서 SKU 및 SPU 테이블의 디자인에 대한 자세한 설명이 기사는 전자 상거래 플랫폼에서 SKU 및 SPU의 데이터베이스 설계 문제, 특히 사용자 정의 판매를 처리하는 방법에 대해 논의 할 것입니다 ...

Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Redis 캐시 솔루션을 사용하여 제품 순위 목록의 요구 사항을 효율적으로 실현하는 방법은 무엇입니까? Apr 19, 2025 pm 11:36 PM

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.

See all articles