ローカルSMTPを使って問い合わせ完了メールを送る方法|新人エンジニア研修向けにSpring BootとJavaMailSenderを解説
こんにちは。ゆうせいです。
今回は、Spring BootのJavaMailSenderとローカルSMTPを使って、問い合わせ完了メールを送る方法を新人エンジニア研修向けに解説します。
問い合わせフォームを作ると、よく次のような機能が必要になります。
お問い合わせを受け付けました。
担当者より順次ご連絡いたします。
このようなメールを、問い合わせ送信後に自動で送る機能です。
ただし、新人研修でいきなり本物のGmailや会社メールへ送信するのは少し危険です。
宛先を間違えて外部へ送ってしまうかもしれませんし、SMTP認証や送信制限で詰まる可能性もあります。
そこでおすすめなのが、ローカルSMTPです。
ローカルSMTPとは、自分のPC上で動く「練習用のメールサーバー」です。
実際の外部メールアドレスへは送らず、ローカルのWeb画面で送信されたメール内容を確認できます。
今回のサンプルでは、Mailpitというメールテストツールを使います。Mailpitは、開発者向けのSMTPテストツールで、SMTPサーバーとしてメールを受け取り、Web UIでメール内容を確認できるツールです。公式サイトでも、無料・オープンソースのSMTP testing toolであり、Web UIやREST APIを備えていると説明されています。
今回のゴール
今回作る流れは、次のとおりです。
問い合わせフォームを表示する
↓
名前、メールアドレス、問い合わせ内容を入力する
↓
送信ボタンを押す
↓
Spring BootがPOSTで受け取る
↓
JavaMailSenderでメールを作る
↓
MailpitのローカルSMTPへ送る
↓
MailpitのWeb画面でメール内容を確認する
重要なのは、実際のGmailや会社メールには送らない点です。
Mailpitがメールを受け止めてくれるため、研修中に誤送信しにくくなります。
たとえるなら、Mailpitは「本物の郵便局」ではなく「郵便の練習場」です。
手紙の宛名、件名、本文は確認できますが、本当に相手の家へ配達されるわけではありません。
ローカルSMTPとは何か
SMTPは、Simple Mail Transfer Protocolの略です。
メールを送るための通信の仕組みです。
Spring Bootからメールを送るときは、次のような流れになります。
Spring Bootアプリ
↓
JavaMailSender
↓
SMTPサーバー
↓
メール受信側
本番環境なら、SMTPサーバーはGmail、会社メール、SendGrid、Amazon SESなどになります。
研修環境では、MailpitのようなローカルSMTPを使います。
| 種類 | 説明 | 研修での使いやすさ |
|---|---|---|
| 本物のSMTP | 実際のメールアドレスへ送信する | 認証や誤送信に注意が必要 |
| ローカルSMTP | 自分のPC内でメールを受け取る | 安全に練習しやすい |
新人エンジニアは、まず「JavaMailSenderはメールを作ってSMTPへ渡す係」と覚えてください。
JavaMailSenderだけでメールが世界中へ届くわけではありません。
メール配送にはSMTPサーバーが必要です。
Mailpitを使う理由
Mailpitを使う理由は、研修で安全にメール送信の練習ができるからです。
| メリット | 説明 |
|---|---|
| 外部へ誤送信しにくい | メールはMailpit内に保存される |
| 認証設定が簡単 | 学習用ならユーザー名やパスワードなしで使える |
| ブラウザで確認できる | 件名、宛先、本文をWeb UIで見られる |
| 研修室で使いやすい | Windows 11でも使いやすい |
Mailpitの公式インストールページでは、Mailpitは単一バイナリとして動作し、Windows、Linux、Mac向けの静的バイナリをリリースページから取得できると説明されています。また、デフォルトではWeb UIが8025番ポート、SMTPが1025番ポートで待ち受けると説明されています。
つまり、Spring Bootからはlocalhost:1025へメールを送り、ブラウザではlocalhost:8025でメールを確認するイメージです。
Spring Boot
↓
localhost:1025
↓
Mailpit
↓
http://localhost:8025 で確認
研修環境の前提
今回の前提は、次のようにします。
| 項目 | 内容 |
|---|---|
| OS | Windows 11 |
| Java | JDK 17以上を想定 |
| フレームワーク | Spring Boot |
| メール送信 | JavaMailSender |
| ローカルSMTP | Mailpit |
| テンプレート | Thymeleaf |
Spring Boot側では、spring-boot-starter-mailを使います。
Spring Boot公式ドキュメントでは、Spring FrameworkがJavaMailSenderを使ったメール送信の抽象化を提供し、Spring Bootがその自動構成とスターターモジュールを提供すると説明されています。
全体構成
今回作るクラスとHTMLは、次の構成にします。
src/main/java
com.example.demo
controller
ContactController.java
service
ContactMailService.java
src/main/resources
templates
contact
form.html
complete.html
application.properties役割は次のとおりです。
| ファイル | 役割 |
|---|---|
| form.html | 問い合わせ入力画面 |
| complete.html | 問い合わせ完了画面 |
| ContactController | 画面表示とフォーム送信を受け取る |
| ContactMailService | JavaMailSenderでメールを送る |
| application.properties | Mailpitへ接続するSMTP設定を書く |
pom.xmlに依存関係を追加する
まず、メール送信用の依存関係を追加します。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>Thymeleafを使う場合は、Thymeleafの依存関係も必要です。 Webアプリとして動かすため、spring-boot-starter-webも必要です。 メール送信機能では、spring-boot-starter-mailがJavaMailSenderを使うための入口になります。
application.propertiesにMailpit用設定を書く
次に、Spring BootからMailpitへ接続するための設定を書きます。
spring.mail.host=localhost
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
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000この設定の意味を整理します。
| 設定 | 意味 |
|---|---|
| spring.mail.host=localhost | 自分のPC上のSMTPへ接続する |
| spring.mail.port=1025 | MailpitのSMTPポートへ送る |
| mail.smtp.auth=false | SMTP認証を使わない |
| mail.smtp.starttls.enable=false | STARTTLSを使わない |
| connectiontimeout | 接続待ち時間の上限 |
| timeout | 応答待ち時間の上限 |
| writetimeout | 書き込み待ち時間の上限 |
Spring Boot公式ドキュメントでも、spring.mail.hostと関連ライブラリが利用可能な場合にJavaMailSenderが自動構成され、spring.mail名前空間の設定で送信者をカスタマイズできると説明されています。また、メールサーバーが応答しない場合にスレッドがブロックされるのを避けるため、SMTPタイムアウト値を設定する例も示されています。
研修では、SMTPサーバーが起動していない状態で送信すると、接続エラーになります。
タイムアウトを設定しておくと、長時間待ち続ける状態を避けやすくなります。
問い合わせフォームを作る
次に、問い合わせフォームを作ります。
ファイルの場所です。
src/main/resources/templates/contact/form.html
form.htmlです。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>お問い合わせ</title>
</head>
<body>
<h1>お問い合わせ</h1>
<p>以下の内容を入力して送信してください。</p>
<form th:action="@{/contact}" method="post">
<div>
<label for="name">お名前</label>
<input type="text" id="name" name="name">
</div>
<div>
<label for="email">メールアドレス</label>
<input type="email" id="email" name="email">
</div>
<div>
<label for="message">お問い合わせ内容</label>
<textarea id="message" name="message" rows="8" cols="50"></textarea>
</div>
<button type="submit">送信</button>
</form>
</body>
</html>フォーム送信では、inputやtextareaのname属性が重要です。
| HTMLのname属性 | Controllerの受け取り |
|---|---|
| name="name" | @RequestParam String name |
| name="email" | @RequestParam String email |
| name="message" | @RequestParam String message |
idはJavaScriptやlabelとの対応で使うことが多いです。
nameはサーバーへ送るための名前です。
新人エンジニアは、フォーム送信ではname属性を見る!と覚えてください。
Controllerを作る
次に、問い合わせ画面の表示と送信を受け取るControllerを作ります。
package com.example.demo.controller;
import com.example.demo.service.ContactMailService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
public class ContactController {
private final ContactMailService contactMailService;
public ContactController(ContactMailService contactMailService) {
this.contactMailService = contactMailService;
}
@GetMapping("/contact")
public String showContactForm() {
return "contact/form";
}
@PostMapping("/contact")
public String sendContact(
@RequestParam String name,
@RequestParam String email,
@RequestParam String message,
RedirectAttributes redirectAttributes) {
contactMailService.sendCompleteMail(name, email, message);
redirectAttributes.addFlashAttribute(
"completeMessage",
"お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
);
return "redirect:/contact/complete";
}
@GetMapping("/contact/complete")
public String complete() {
return "contact/complete";
}
}このControllerでは、GET /contactで入力画面を表示し、POST /contactで問い合わせ内容を受け取ります。
送信後は、redirect:/contact/completeへ移動しています。
これはPRGパターンです。
PRGパターンとは、Post Redirect Getの略で、フォーム送信後の再読み込みによる二重送信を防ぎやすくする設計です。
POST /contact
↓
redirect:/contact/complete
↓
GET /contact/complete
問い合わせ送信は、同じ内容が何度も送られると困ります。
そのため、POST後は直接完了画面を返さず、redirectするのが基本です。
メール送信用Serviceを作る
次に、JavaMailSenderを使うServiceを作ります。
package com.example.demo.service;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class ContactMailService {
private final JavaMailSender javaMailSender;
public ContactMailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public void sendCompleteMail(String name, String email, String message) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(email);
mailMessage.setFrom("no-reply@example.com");
mailMessage.setSubject("お問い合わせを受け付けました");
String body =
name + " 様\n\n"
+ "お問い合わせありがとうございます。\n"
+ "以下の内容でお問い合わせを受け付けました。\n\n"
+ "お問い合わせ内容\n"
+ "------------------------------\n"
+ message + "\n"
+ "------------------------------\n\n"
+ "担当者より順次ご連絡いたします。\n\n"
+ "このメールは研修用アプリから自動送信されています。";
mailMessage.setText(body);
javaMailSender.send(mailMessage);
}
}SimpleMailMessageは、シンプルなテキストメールを作るためのクラスです。
今回のように、件名と本文だけの問い合わせ完了メールなら、SimpleMailMessageで十分です。
| メソッド | 意味 |
|---|---|
| setTo | 宛先 |
| setFrom | 差出人 |
| setSubject | 件名 |
| setText | 本文 |
| send | メール送信 |
手紙でたとえるなら、setToは宛名、setFromは差出人、setSubjectは封筒に書く件名、setTextは手紙の本文です。
javaMailSender.sendは、ポストに投函する処理です。
ただし今回のポストは本物の外部メールサーバーではなく、Mailpitです。
完了画面を作る
問い合わせ完了画面を作ります。
ファイルの場所です。
src/main/resources/templates/contact/complete.html
complete.htmlです。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>お問い合わせ完了</title>
</head>
<body>
<h1>お問い合わせ完了</h1>
<p th:if="${completeMessage}" th:text="${completeMessage}"></p>
<p>研修環境では、実際の外部メールには送信していません。</p>
<p>MailpitのWeb画面で、送信されたメール内容を確認してください。</p>
<p>
<a th:href="@{/contact}">お問い合わせ画面へ戻る</a>
</p>
</body>
</html>RedirectAttributesで渡したcompleteMessageを表示しています。
redirectAttributes.addFlashAttribute(
"completeMessage",
"お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
);
addFlashAttributeは、redirect先で一度だけ使える値を渡すために使います。
完了メッセージのような一時的な情報に向いています。
Mailpitでメールを確認する流れ
研修では、次の順番で動作確認します。
1. Mailpitを起動する 2. Spring Bootを起動する 3. ブラウザで /contact を開く 4. 名前、メールアドレス、問い合わせ内容を入力する 5. 送信ボタンを押す 6. /contact/complete に移動する 7. MailpitのWeb UIを開く 8. 送信されたメールを確認する
Mailpitのデフォルトでは、SMTPは1025番、Web UIは8025番で動きます。
ブラウザで次のように開きます。
http://localhost:8025
Mailpitの画面に、問い合わせ完了メールが表示されていれば成功です。
確認するポイントは次のとおりです。
| 確認項目 | 見る内容 |
|---|---|
| 宛先 | フォームに入力したメールアドレスになっているか |
| 差出人 | no-reply@example.comになっているか |
| 件名 | お問い合わせを受け付けました |
| 本文 | 名前と問い合わせ内容が入っているか |
| 文字化け | 日本語が正しく表示されているか |
Mailpitが起動していないとどうなるか
Mailpitが起動していない状態で問い合わせフォームを送信すると、Spring Bootはlocalhost:1025へ接続しようとして失敗します。
よくあるエラーは、Connection refusedです。
Connection refused: connect
意味は、「localhost:1025に接続しようとしたが、そこにSMTPサーバーがいません」ということです。
郵便局へ手紙を持っていったら、郵便局が閉まっていたような状態です。
この場合は、次を確認してください。
| 確認すること | 内容 |
|---|---|
| Mailpitが起動しているか | ターミナルやコマンドプロンプトで起動状態を見る |
| ポート番号が合っているか | Spring Bootは1025へ送っているか |
| Web UIが開けるか | localhost:8025をブラウザで開けるか |
| application.propertiesが反映されているか | spring.mail.hostとportを確認する |
例外処理を少し追加する
研修用でも、メール送信失敗時の処理を入れておくと理解が深まります。
たとえば、メール送信に失敗した場合にRuntimeExceptionへ変換します。
package com.example.demo.service;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class ContactMailService {
private final JavaMailSender javaMailSender;
public ContactMailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public void sendCompleteMail(String name, String email, String message) {
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo(email);
mailMessage.setFrom("no-reply@example.com");
mailMessage.setSubject("お問い合わせを受け付けました");
String body =
name + " 様\n\n"
+ "お問い合わせありがとうございます。\n"
+ "以下の内容でお問い合わせを受け付けました。\n\n"
+ "お問い合わせ内容\n"
+ "------------------------------\n"
+ message + "\n"
+ "------------------------------\n\n"
+ "担当者より順次ご連絡いたします。\n\n"
+ "このメールは研修用アプリから自動送信されています。";
mailMessage.setText(body);
javaMailSender.send(mailMessage);
} catch (MailException e) {
throw new RuntimeException("問い合わせ完了メールの送信に失敗しました。", e);
}
}
}MailExceptionは、Springのメール送信処理で発生する例外です。
新人エンジニアは、メール送信は失敗する可能性がある処理だと覚えてください。
SMTPサーバーが落ちている、ポートが違う、ネットワークがつながらない、認証に失敗するなど、さまざまな理由で失敗します。
Controller側で失敗メッセージを表示する簡単な例
研修用にわかりやすくするなら、Controllerでtry-catchしてエラー画面へ戻すこともできます。
@PostMapping("/contact")
public String sendContact(
@RequestParam String name,
@RequestParam String email,
@RequestParam String message,
RedirectAttributes redirectAttributes) {
try {
contactMailService.sendCompleteMail(name, email, message);
redirectAttributes.addFlashAttribute(
"completeMessage",
"お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
);
return "redirect:/contact/complete";
} catch (RuntimeException e) {
redirectAttributes.addFlashAttribute(
"errorMessage",
"メール送信に失敗しました。Mailpitが起動しているか確認してください。"
);
return "redirect:/contact";
}
}ただし、実務では@ControllerAdviceで例外処理を共通化することも多いです。
研修初期では、まずtry-catchで流れを見て、その後で@ControllerAdviceに進むと理解しやすいです。
問い合わせフォームにエラーメッセージを表示する
form.htmlにエラーメッセージ表示を追加します。
<p th:if="${errorMessage}" th:text="${errorMessage}"></p>
全体の一部としては、次のように置けます。
<h1>お問い合わせ</h1>
<p th:if="${errorMessage}" th:text="${errorMessage}"></p>
<p>以下の内容を入力して送信してください。</p>
Mailpitを起動し忘れて送信すると、問い合わせ画面に戻り、エラーメッセージが表示されます。
このように失敗時の動きも研修で確認しておくと、トラブル調査の練習になります。
入力チェックも本来は必要
今回のサンプルは、メール送信の仕組みを理解するためにシンプルにしています。
ただし、実際の問い合わせフォームでは入力チェックが必要です。
| 項目 | チェック例 |
|---|---|
| 名前 | 空欄禁止、文字数制限 |
| メールアドレス | 空欄禁止、メール形式 |
| 問い合わせ内容 | 空欄禁止、文字数制限 |
新人研修では、最初にJavaMailSenderとMailpitでメール送信を確認し、その後に@ValidとBindingResultで入力チェックを追加するとよいです。
いきなり全部入れると、どこでエラーが起きているのかわかりにくくなります。
まず小さく動かせ!
そのあと安全性を高める、という順番が大切です。
問い合わせ内容をDBに保存するか
実務の問い合わせ機能では、メールを送るだけでなく、問い合わせ内容をDBにも保存することが多いです。
問い合わせ内容をDBに保存する
↓
問い合わせ完了メールを送る
↓
完了画面へredirectする
なぜDB保存が必要なのでしょうか。
メール送信だけに頼ると、SMTP障害や送信失敗が起きたときに問い合わせ内容が残らない可能性があるからです。
| 方法 | メリット | 注意点 |
|---|---|---|
| メール送信だけ | 実装が簡単 | 失敗時に問い合わせ内容が残らない可能性がある |
| DB保存 + メール送信 | 問い合わせ内容を管理しやすい | 実装が少し増える |
研修の第一段階ではメール送信だけで十分です。
次の段階では、contactsテーブルを作り、問い合わせ内容をDBに保存してからメール送信する設計に挑戦しましょう。
HTMLメールにしたい場合
今回のサンプルはテキストメールです。
HTMLメールを送りたい場合は、SimpleMailMessageではなくMimeMessageHelperを使います。
ただし、新人研修の最初はテキストメールで十分です。
| メール形式 | 使うクラス | 向いている場面 |
|---|---|---|
| テキストメール | SimpleMailMessage | 研修、通知、シンプルな自動返信 |
| HTMLメール | MimeMessageHelper | 装飾付きメール、リンクボタン、レイアウト付きメール |
メール送信の基礎を理解するまでは、まずSimpleMailMessageで進めるとよいです。
ローカルSMTP研修でよくあるトラブル
| 症状 | 原因候補 | 確認ポイント |
|---|---|---|
| Connection refused | Mailpitが起動していない | localhost:8025を開けるか確認する |
| メールがMailpitに出ない | ポート設定が違う | spring.mail.port=1025か確認する |
| フォーム送信で値が空 | name属性がない | inputやtextareaのnameを確認する |
| 404になる | URLが違う | th:actionと@PostMappingを確認する |
| 500になる | Java側で例外が発生 | Spring BootのConsoleログを見る |
| 文字化けする | 文字コード設定やメール形式の問題 | UTF-8、MimeMessageHelperを検討する |
メール送信のトラブルは、コードだけが原因とは限りません。
Mailpitの起動、ポート番号、application.properties、フォームのname属性、ControllerのURL、Spring Bootのログを順番に確認してください。
DevToolsでフォーム送信を確認する
問い合わせフォームが正しく送信されているかは、ブラウザのDevToolsでも確認できます。
1. ブラウザでDevToolsを開く 2. Networkタブを開く 3. 問い合わせフォームを送信する 4. /contact のPOST通信をクリックする 5. PayloadまたはForm Dataを見る
Form Dataに次のような値が出ていれば、HTMLからSpring Bootへ値が送られています。
name: 山田太郎 email: yamada@example.com message: 商品について質問があります。
Form Dataに値が出ていない場合は、HTMLのname属性を確認してください。
メールが届かない原因を調べるときも、まず「フォーム値が送られているか」を確認しましょう。
新人エンジニアが理解すべき役割分担
| 部品 | 役割 |
|---|---|
| HTMLフォーム | 問い合わせ内容を入力してPOST送信する |
| Controller | 送信された値を受け取り、Serviceを呼ぶ |
| Service | メール本文を作り、JavaMailSenderで送信する |
| JavaMailSender | SMTPサーバーへメール送信を依頼する |
| Mailpit | ローカルSMTPとしてメールを受け取り、Web UIで見せる |
| application.properties | SMTP接続先を設定する |
この役割分担を意識すると、メール送信機能のコードが読みやすくなります。
Controllerにメール本文作成を全部書くのではなく、ContactMailServiceに分けるのがポイントです。
Controllerは受付係。
Serviceはメール作成係。
Mailpitは練習用の郵便局。
このように役割で覚えると理解しやすいです。
研修でのおすすめ演習
研修では、次の順番で演習するとよいです。
| 順番 | 演習内容 | 学べること |
|---|---|---|
| 1 | Mailpitを起動する | ローカルSMTPの役割 |
| 2 | Spring Bootから固定メールを送る | JavaMailSenderの基本 |
| 3 | 問い合わせフォームの値をメール本文に入れる | @RequestParamとメール本文作成 |
| 4 | PRGパターンで完了画面へ遷移する | 二重送信対策 |
| 5 | Mailpitを停止してエラーを確認する | 例外処理とトラブル調査 |
| 6 | 入力チェックを追加する | @ValidとBindingResult |
| 7 | 問い合わせ内容をDB保存する | DAO、Service、トランザクション設計 |
特に、Mailpitをわざと停止してエラーを見る演習はおすすめです。
正常に動くコードだけでなく、壊れたときに何が起きるかを知ることが、実務力につながります。
まとめ
ローカルSMTPを使うと、Spring BootのJavaMailSenderによる問い合わせ完了メールを安全に練習できます。
Mailpitを使えば、実際の外部メールへ送らずに、送信されたメールの宛先、件名、本文をブラウザで確認できます。
| ポイント | 内容 |
|---|---|
| ローカルSMTP | 自分のPC上で動く練習用のSMTPサーバー |
| Mailpit | メールを受け取りWeb UIで確認できるテストツール |
| JavaMailSender | Spring BootからSMTPへメール送信を依頼する仕組み |
| SimpleMailMessage | シンプルなテキストメールを作るクラス |
| spring.mail.host | SMTPサーバーの接続先 |
| spring.mail.port | SMTPサーバーのポート番号 |
| PRGパターン | 問い合わせ送信後の二重送信を防ぎやすくする |
一言でまとめるなら、ローカルSMTPを使う問い合わせ完了メールは「本物の外部メールに送らず、研修用の郵便局で安全にメール送信を練習する仕組み」です。
新人エンジニアは、まず次の流れを覚えてください。
Mailpitを起動する
↓
Spring Bootのspring.mail.hostをlocalhostにする
↓
spring.mail.portを1025にする
↓
問い合わせフォームをPOSTする
↓
JavaMailSenderでメールを送る
↓
MailpitのWeb UIで確認する
今後の学習では、JavaMailSender、SimpleMailMessage、MimeMessageHelper、SMTP、Mailpit、application.properties、PRGパターン、@ValidとBindingResult、@ControllerAdvice、DB保存との組み合わせを順番に学ぶとよいです。まずはMailpitで外部に誤送信しない安全な環境を作り、問い合わせ完了メールの宛先、件名、本文が正しく作られているかを確認してみましょう!
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。
最新の投稿
新人エンジニア研修講師2026年6月18日JavaのOptionalでnullを安全に扱う方法|NullPointerExceptionを防ぎ、DAOの戻り値をわかりやすくする
新人エンジニア研修講師2026年6月18日ローカルSMTPを使って問い合わせ完了メールを送る方法|新人エンジニア研修向けにSpring BootとJavaMailSenderを解説
新人エンジニア研修講師2026年6月18日DevToolsでHTTP通信・エラー・DOMを確認する方法|新人エンジニア向けにブラウザ開発者ツールを解説
新人エンジニア研修講師2026年6月18日Spring Bootの@RestControllerとは?Webアプリケーションを学んだ新人エンジニア向けにAPIをやさしく解説
