質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1044閲覧

Spring Boot starter-mail メールが2回送信されてしまう

chocolate_pie

総合スコア26

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/01/15 07:33

編集2020/01/15 10:00

前提・実現したいこと

いつもお世話になっております。
実現したいこと
Spring Bootのstarter-mailを使って複数人に同じ内容のメールを1通のみ送信したい

メールは送信されますが、メソッドが2回繰り返されてしまい、二重にメールが
送信されてしまいます。

2回送信される原因が分かりません。

発生している問題・エラーメッセージ

メールが二重送信されてしまう

該当のソースコード

MailController

Java

1package jp.co.itc.mbo.controller; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.mail.SimpleMailMessage; 7import org.springframework.mail.javamail.JavaMailSender; 8import org.springframework.stereotype.Controller; 9import org.springframework.web.bind.annotation.RequestMapping; 10import org.springframework.web.bind.annotation.RequestMethod; 11 12import jp.co.itc.mbo.entity.UserMaster; 13import jp.co.itc.mbo.service.UserMasterService; 14 15@Controller 16@RequestMapping("/mailer") 17public class MailController { 18 19 @Autowired 20 UserMasterService usermasterservice; 21 22 final String charset = "UTF-8"; 23 private final JavaMailSender javaMailSender ; 24 25 @Autowired 26 MailController(JavaMailSender javaMailSender) { 27 this.javaMailSender = javaMailSender; 28 } 29 30 @RequestMapping(value = "/send", method = RequestMethod.GET) 31 public String send(){ 32 List <UserMaster> users=usermasterservice.findAllValidUserId(); 33 //ここから↓が二週目にはいってループ 34 int cnt=users.size(); 35 String[] mailList= new String[cnt]; 36 37 int i=0; 38 for(UserMaster user:users) { 39 String mailaddress=user.getMailaddress(); 40 mailList[i]=mailaddress; 41 i++; 42 } 43 44 SimpleMailMessage msg = new SimpleMailMessage(); 45 46 msg.setFrom(“送信元"); 47 msg.setTo(mailList); 48 msg.setSubject("テストメール");//タイトルの設定 49 msg.setText("Spring Boot より本文送信"); //本文の設定 50 51 javaMailSender.send(msg); 52 53 //一周目でreturnが処理されず int cnt=users.size();に戻ってしまう 54 //二週目でreturmが処理されメールが2通送信される 55 56 return "redirect:/home"; 57 } 58 59} 60 61

試したこと

・デバックをしたところ、for文を書いていない部分が2回回っていました(詳しくはコメントアウトに記載)
・msg.setTo(mailList);の()の中に1つのメールアドレスを直に打つと1回送信されます。
・mailListの中身を2つにすると1回送信、3つ以上だと2回送信されます。

どうやら配列型で送信しようとするとおかしくなるみたいです(?)

補足情報(FW/ツールのバージョンなど)

MailControllerのみでしかメールに関係する操作をしていないので1つしかクラスを載せていませんが、SpringMVCで関連するクラスがほかにありましたらご教授いただきたいです。
初心者で至らない点が多いと思いますがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/15 11:20

とりあえずコンパイルエラーだからそのコードじゃないのでは?
guest

回答1

0

ベストアンサー

インデントやスペースがやや読みにくいので整理しました。

送信先のメールアドレスをループして取り出しているだけで、メールの送信処理は1回だけです。
今回の例では、1回のメール送信で2つのアドレスに同じ内容のメールが1度飛んでいるだけです。

あとは行コメントに書いている内容をご覧ください。

java

1 @RequestMapping(value = "/send", method = RequestMethod.GET) 2 public String send(){ 3 List<UserMaster> users = Arrays.asList(new UserMaster("aaa"), new UserMaster("bbb")); 4 //ここから↓が二週目にはいってループ(ここではない。配列のサイズを決めている) 5 int cnt=users.size(); 6 String[] mailList= new String[cnt]; 7 8 int i=0; 9 for(UserMaster user:users) { 10 String mailaddress = user.getAddress(); 11 mailList[i] = mailaddress; 12 i++; 13 } // このループでは、送信先のメールアドレスをループの数だけ取り出しているだけ 14 15 SimpleMailMessage msg = new SimpleMailMessage(); 16 17 msg.setFrom("送信元"); 18 msg.setTo(mailList); // 複数のメールアドレスを設定している 19 msg.setSubject("テストメール"); 20 msg.setText("Spring Boot より本文送信"); //本文の設定 21 22 javaMailSender.send(msg); // メールの送信処理はこの1回だけ! 23 24 return "success"; 25 }

投稿2020/01/15 14:13

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chocolate_pie

2020/01/16 01:21

今回もご回答いただき誠にありがとうございます。 コードを見直しましたが、書き方がA-pZ様の回答と同じ書き方であったので、 再度デバックをしたところ、1回のみ送信の処理がされました。 前回デバックした際に2回送信されたことが謎ですが、無事解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問