SpringBoot メール送信 実装 サンプル MailHog

今回は、SpringBootでメール送信を実装するメモとなります。

org.springframework.mailでメール送信オブジェクトを作成して、

シンプルなメールを送信するだけの内容となります。

雛形(テンプレート)を利用したメール送信は、また別のメモでまとめたいと思います。

尚、テストメールを確認するためのSMTPサーバーは、MailHogを利用します。

MailHogが動作可能な前提でのメモとなります。

MailHog 開発環境用 メールサーバー Docker

環境

  • macOS:Big Sur 11.5.2
  • IntelliJ(Ultimate Edition):2023.1
  • MailHog:1.0.1

動作バージョン

  • Java:Amazon Corretto 17
  • SpringBoot:3.1.0
  • Gradle:7.6.1

SpringBoot 依存設定

メール送信の実装に必要な依存モジュールは、spring-boot-starter-mail のみです。

build.gradleもしくは、pom.xmlのdependenciesに追加して依存モジュールを更新すれば、

実装に必要なorg.springframework.mailがロードされます。

・build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-mail'
}

・pom.xml

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

こちらのメモ用に、挙動確認で作成したプロジェクトのbuild.gradleは以下となります。

挙動確認用に簡易コントローラを実装して、確認用のエンドポイントを作成したいので、

spring-boot-starter-webも含まれています。

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.0'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

tasks.named('test') {
    useJUnitPlatform()
}

spring-starter-mail build.gradle

 


メール送信実装 (挙動確認用コントローラ実装)

SimpleMailMessageでメール内容を作成して、

mailSender.send(SimpleMailMessageオブジェクト)でメール送信を行います。

package com.example.springbootmailsample.controller;

import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SendMailController {

    private final MailSender mailSender;

    public SendMailController(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    @GetMapping("/sendTestMail")
    public String sendTestMail() {
        final SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("mailhog.example.from");
        simpleMailMessage.setTo("mailhog.example.to");
        simpleMailMessage.setCc("mailhog.example.cc");
        simpleMailMessage.setBcc("mailhog.example.bcc");
        simpleMailMessage.setSubject("テストメールタイトル");
        simpleMailMessage.setText("テストメール本文\r\nテスト。"); // 本文
        try {
            mailSender.send(simpleMailMessage);
        } catch (MailException e) {
            e.printStackTrace();
        }
        return "send Test Mail. check MailHog.";
    }
}

Springboot send mail sample

 


メールサーバー設定 定義

メールサーバの設定をapplication.propertiesやapplication.yamlで指定します。

今回は、MailHogの設定がデフォルトのままの想定で指定します。

・application.propertis

spring.mail.host=localhost
spring.mail.port=1025
spring.mail.username=user
spring.mail.password=pass

・application.yaml

  mail:
    host: localhost
    port: 1025
    username: user
    password: pass

 

https://spring.pleiades.io/spring-boot/docs/current/reference/html/application-properties.html


挙動確認

MailHogと実装したコントローラのサービスが動作している状態で、

挙動確認用のエンドポイントにアクセスします。

http://localhost:8080/sendTestMail

Springboot send mail example

MailHogのウェブメールUIでメールが届いていることを確認できます。

Springboot MailHog

Springboot send mail example


今回のメモは以上となります。

シンプルなメールであれば、簡単に送信まで実装できます。

MailHogもローカルでもメール送信のテストをできて便利です。

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 172

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る