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年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 192

コメントを残す

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

CAPTCHA


関連投稿

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

トップに戻る