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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

4499閲覧

Spring メールを複数のアドレスに送信したい MimeMessageHelper

chocolate_pie

総合スコア26

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2020/04/02 09:28

編集2020/04/04 08:01

前提・実現したいこと

Springからthymeilafをテンプレートに利用してHTMLメール送信する機能を実装
していたところ、toが1つのアドレスにしか対応していないことに気づきました。

これを、複数送信するためにはどこにどんな処理を追加すればよろしいでしょうか…?

メールアドレスを配列で取ってこないと複数送信ができないことは分かっているので、
配列をどうやってtoに持ってくるかが知りたいです。

よろしくお願いします。

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

メールが複数人に送れない

該当のソースコード

MailSendService.java

java

1package com.paidmanage.service.primary; 2 3import java.nio.charset.StandardCharsets; 4 5import javax.mail.internet.MimeMessage; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.mail.javamail.JavaMailSender; 9import org.springframework.mail.javamail.MimeMessageHelper; 10import org.springframework.mail.javamail.MimeMessagePreparator; 11import org.springframework.stereotype.Service; 12import org.thymeleaf.context.Context; 13import org.thymeleaf.spring5.SpringTemplateEngine; 14import org.thymeleaf.templatemode.TemplateMode; 15import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; 16 17@Service 18public class SendMailService { 19 @Autowired 20 private JavaMailSender javaMailSender; 21 22 public void sendMail(Context context,String email,String title,String htmlLocation) { 23 24 javaMailSender.send(new MimeMessagePreparator() { 25 26 @Override 27 public void prepare(MimeMessage mimeMessage) throws Exception { 28 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, 29 StandardCharsets.UTF_8.name()); 30 helper.setFrom("hogehoge@sample"); 31 helper.setTo(email); 32 helper.setSubject(title); 33 helper.setText(getMailBody(htmlLocation, context), true); 34 } 35 }); 36 37 38 } 39 40 private String getMailBody(String templateName, Context context) { 41 SpringTemplateEngine templateEngine = new SpringTemplateEngine(); 42 templateEngine.setTemplateResolver(mailTemplateResolver()); 43 return templateEngine.process(templateName, context); 44 45 } 46 47 private ClassLoaderTemplateResolver mailTemplateResolver() { 48 ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); 49 templateResolver.setTemplateMode(TemplateMode.HTML); 50 templateResolver.setPrefix("mailtemplate/"); 51 templateResolver.setSuffix(".html"); 52 templateResolver.setCharacterEncoding("UTF-8"); 53 templateResolver.setCacheable(true); 54 return templateResolver; 55 } 56 57} 58

Controller.java

java

1@Controller 2public class ItemController { 3 @Autowired 4 SendMailService sendMailService; 5 //メール送信 6 @RequestMapping("/sendmail") 7 public String sendmail() { 8 //出力内容設定($で渡す値) 9 Context context = new Context(); 10 context.setVariable("name", "ほげ"); 11 context.setVariable("name2", "ほげほげ"); 12 String email="×××@co.jp"; 13 //内容、宛先、タイトル、HTMLファイル指定 14 sendMailService.sendMail(context,email,"コントローラーから","samplemail"); 15 return "redirect:/"; 16 } 17} 18

samplemail.html

java

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<body> 4 <h2 style="margin-bottom: 20px;" th:inline="text" th:text="|${name}様|"></h2> 5 <h2 style="margin-bottom: 20px;" th:inline="text">[[${name2}]]</h2> 6 <p>テストメール</p> 7</body> 8</html>

試したこと

以下のサイトからMimeMessageを使った複数送信の例を発見したのですが、私の使っているものに
MimeMessage msg = new MimeMessage(session);が存在しないので使い方が分かりませんでした。
【備忘録】String型の配列に格納されたメールアドレスをInternetAddress[]型に変換して複数の宛先にメールを送信【java】

JavaMailでのメール送信まとめその1

そもそも、ThymeleafをメールテンプレートにしてHTMLメールを送信するを参考にメール機能を実装したのですがMailSendServiceで行っていることがほとんど理解できていません…

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

初心者で至らない点があると思いますがよろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

コントローラーの引数を配列型にしたら無事送信できました。
for文で配列一つ一つ回す方法でもできましたが、toに詰めるだけでも実現できたので、for文はコメントアウトしています。

java

1public void sendMails(Context context,String[] emails,String title,String htmlLocation) { 2 //for (String email : emails) { 3 javaMailSender.send(new MimeMessagePreparator() { 4 5 @Override 6 public void prepare(MimeMessage mimeMessage) throws Exception { 7 8 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, 9 StandardCharsets.UTF_8.name()); 10 helper.setFrom("hogehoge@sample"); 11 helper.setTo(emails); 12 helper.setSubject(title); 13 helper.setText(getMailBody(htmlLocation, context), true); 14 } 15 }); 16 //} 17 }

投稿2020/04/06 00:49

編集2020/04/07 11:00
chocolate_pie

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問