開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. Java >
  4. 【Spring Boot】Java Mail SenderとMailpitでメール送信機能を実装
no-image

【Spring Boot】Java Mail SenderとMailpitでメール送信機能を実装

こんにちは、おさむちゃんです。
今回は社内向けに作成したSpring Bootの研修内容から一部を抜粋、変更してJava Mail SenderとMailpitを利用したシンプルなメール送信機能の実装・動作確認方法を紹介します。

環境

- Java: 21.0.3
- Spring Boot: 3.3.0
- Gradle: 8.8
- Docker: 24.0.6
- Docker Compose: 2.22.0

セットアップ

Spring Initializrを使用してプロジェクトを作成しました。
以下の設定を行います。

- Project: Gradle - Groovy
- Language: Java
- Spring Boot: 3.3.0
- Java: 21
- Dependencies:
- Spring Web
- Java Mail Sender
 

build.gradleの設定の確認

Spring Initializrを使用して生成された build.gradle には以下の依存関係が含まれていることを確認します。
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

application.propertiesの設定

 src/main/resources/application.properties に以下の設定を追加します。

server.port=8080
spring.mail.host=mailpit
spring.mail.port=1025
spring.mail.username=
spring.mail.password=
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false

Mialpitを使用してローカルでメールを送信するための設定を行なっています。
今回の研修環境では設定を簡略化し、迅速にメール送信機能をテストできるようにするためにSMTP認証とSTARTTLSを無効にしています。

compose.yamlの作成

プロジェクトのルートディレクトリに以下のように compose.yaml ファイルを作成します。

services:
  app:
    image: eclipse-temurin:21
    ports:
      - "8080:8080"
    volumes:
      - .:/app
    working_dir: /app
    command: sh -c './gradlew bootRun'
    environment:
      SPRING_MAIL_HOST: mailpit
      SPRING_MAIL_PORT: 1025

  mailpit:
    image: axllent/mailpit
    ports:
      - "8025:8025"
      - "1025:1025"

Spring Bootアプリケーションを実行するためのappサービスとMailpitを実行するためのmailpitサービスを定義しています。
appサービスでは gradlew bootRun コマンドを使用してSpring Bootアプリケーションを起動し、メール送信機能を利用するためにMailpitのホストとポートを環境変数で設定しています。
mailpitサービスではSMTPサーバーとしてポート1025を、Webインターフェースとしてポート8025を公開しています。

サービスの実装

 EmailService を以下の内容で作成します。

package com.example.demo.service;

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    private final JavaMailSender mailSender;

    public EmailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendMail(
        String subject,
        String text,
        String to,
        String from
    ) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject(subject);
        message.setText(text);
        message.setTo(to);
        message.setFrom(from);

        mailSender.send(message);
    }
}

JavaMailSenderを使用してシンプルなメールを送信するメソッドを実装しています。
メールの件名、本文、送信先、送信元をパラメータとして受け取り、 SimpleMailMessage オブジェクトを作成して送信します。

コントローラーの実装

 EmailController を以下の内容で作成します。

package com.example.demo.controller;

import com.example.demo.service.EmailService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmailController {

    private final EmailService emailService;

    public EmailController(EmailService emailService) {
        this.emailService = emailService;
    }

    @GetMapping("/")
    public String sendEmail() {
        emailService.sendMail(
            "タイトル",
            "本文",
            "to@example.com",
            "system@example.com"
        );

        return "Eメールを送信しました";
    }
}

注意: 本番環境ではGETエンドポイントでメールを送信するのはセキュリティ上のリスクが高いため、あくまでローカルでの検証目的のコードです。

アプリケーションの起動


1. 以下のコマンドを実行して、Docker Composeを使用してサービスを起動します。    

    docker compose up --build 

2. ブラウザで http://localhost:8080 にアクセスします。正しく動作していれば、「Eメールを送信しました」というメッセージが表示されます。

3. ブラウザで http://localhost:8025 にアクセスして、MailpitのWebインターフェースで送信されたメールが届いていることを確認します。

まとめ

以上の手順で、Spring Bootを使用してJava Mail SenderとMailpitを利用したメール送信機能を実装する方法を紹介しました。今回の設定では、開発環境で迅速かつ簡単にメール送信機能をテストできるように、シンプルな設定を使用しています。

Mailpitを使用することで、ローカルでメール送信の動作確認が簡単に行えるため、開発効率が向上します。この設定は紹介用に簡略化していますが、実際の開発では適宜環境に応じた設定を行ってください。

本記事が、Spring Bootを使ったメール送信機能の実装の参考になれば幸いです。

  • posted by おさむちゃん
  • Java
TOPに戻る