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

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

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

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

Spring

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

Q&A

解決済

1回答

3512閲覧

springで複数人に別々の本文を送信したい

isacRu

総合スコア64

Java

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

Spring

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

0グッド

0クリップ

投稿2016/10/25 08:01

編集2016/10/31 08:13

springで複数人にメールを送信することはできたのですが、複数人に対し別々のメールの本文を送信したいです。for文を用いて、複数人にメールを送信することは実現できたのですが、その複数人に対し別々のメールの本文を送信がうまくいきません。
JavaConfig

JAVA

1 2import java.io.IOException; 3import java.util.Properties; 4 5import org.apache.velocity.app.VelocityEngine; 6import org.apache.velocity.exception.VelocityException; 7import org.springframework.context.annotation.Bean; 8import org.springframework.context.annotation.ComponentScan; 9import org.springframework.context.annotation.Configuration; 10import org.springframework.mail.javamail.JavaMailSender; 11import org.springframework.mail.javamail.JavaMailSenderImpl; 12import org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean; 13import org.springframework.ui.velocity.VelocityEngineFactory; 14 15@Configuration 16@ComponentScan(basePackages = "com.example.mail") 17public class AppConfig { 18 19 @Bean 20 public JavaMailSender getMailSender() { 21 JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 22 23 // Using gmail. 24 mailSender.setHost("smtp.gmail.com"); 25 mailSender.setPort(587); 26 mailSender.setUsername("username"); 27 mailSender.setPassword("password"); 28 29 Properties javaMailProperties = new Properties(); 30 javaMailProperties.put("mail.smtp.starttls.enable", "true"); 31 javaMailProperties.put("mail.smtp.auth", "true"); 32 javaMailProperties.put("mail.transport.protocol", "smtp"); 33 javaMailProperties.put("mail.debug", "true"); 34 35 mailSender.setJavaMailProperties(javaMailProperties); 36 return mailSender; 37 } 38 39 @Bean 40 public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() { 41 FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean(); 42 bean.setTemplateLoaderPath("/fmtemplates/"); 43 return bean; 44 } 45 46}

JAVA

1 2public interface MailService { 3 4 public void sendEmail(final Object object); 5} 6

JAVA

1 2import java.util.HashMap; 3import java.util.Map; 4 5import javax.mail.internet.MimeMessage; 6 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.mail.MailException; 9import org.springframework.mail.javamail.JavaMailSender; 10import org.springframework.mail.javamail.MimeMessageHelper; 11import org.springframework.mail.javamail.MimeMessagePreparator; 12import org.springframework.stereotype.Service; 13import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; 14 15import com.websystique.spring.model.ProductOrder; 16 17import freemarker.template.Configuration; 18 19@Service("mailService") 20public class MailServiceImpl implements MailService{ 21 22 @Autowired 23 JavaMailSender mailSender; 24 25 @Autowired 26 Configuration freemarkerConfiguration; 27 28 @Override 29 public void sendEmail(Object object) { 30 31 ProductOrder order = (ProductOrder)object; 32 33 MimeMessagePreparator preparator = getMessagePreparator(order); 34 35 try { 36 mailSender.send(preparator); 37 } 38 catch (MailException ex) { 39 System.err.println(ex.getMessage()); 40 } 41 } 42 43 private MimeMessagePreparator getMessagePreparator(final ProductOrder order){ 44 45 MimeMessagePreparator preparator = new MimeMessagePreparator() { 46 47 public void prepare(MimeMessage mimeMessage) throws Exception { 48 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); 49 50 helper.setSubject("件名"); 51 helper.setFrom("from@gmailcom"); 52 helper.setTo(order.getCustomerInfo().getEmail()); 53 54 Map<String, Object> model = new HashMap<String, Object>(); 55 model.put("order", order); 56 String text = geFreeMarkerTemplateContent(model); 57 helper.setText(text, true); 58 } 59 }; 60 return preparator; 61 } 62 63 64 public String geFreeMarkerTemplateContent(Map<String, Object> model){ 65 StringBuffer content = new StringBuffer(); 66 try{ 67 content.append(FreeMarkerTemplateUtils.processTemplateIntoString( 68 freemarkerConfiguration.getTemplate("mailTemplate.txt"),model)); 69 return content.toString(); 70 }catch(Exception e){ 71 System.out.println(e.getMessage()); 72 } 73 return ""; 74 } 75} 76

テンプレート

TXT

1<html> 2 <body> 3 <div> 4 オーダーID : ${order.orderId}. 5 </div> 6 </body> 7</html>

モデルクラス

JAVA

1public class ProductOrder { 2 3 private String orderId; 4 5 private String email; 6 7 public String getOrderId() { 8 return orderId; 9 } 10 11 public void setOrderId(String orderId) { 12 this.orderId = orderId; 13 } 14 public String getEmail(){ 15 return this.email; 16 } 17 public void setEmail(String email){ 18 this.email = email; 19 } 20 21}

メイン処理

java

1package com.websystique.spring.configuration; 2 3import org.springframework.context.annotation.AnnotationConfigApplicationContext; 4import org.springframework.context.support.AbstractApplicationContext; 5 6import com.websystique.spring.model.ProductOrder; 7import com.websystique.spring.service.OrderService; 8 9public class SampleEmailApplication { 10 11 public static void main(String[] args) { 12 AbstractApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); 13 14 OrderService orderService = (OrderService) context.getBean("orderService"); 15 16 String[] emails = {"test1@gmail.com","test2@gmail.com"}; 17 for(int i = 0;i < 2;i++){ 18 orderService.sendOrderConfirmation(getOrder(String.valueOf(i),emails[i])); 19 } 20 ((AbstractApplicationContext) context).close(); 21 } 22 23 public static ProductOrder getOrder(String id,String email){ 24 ProductOrder order = new ProductOrder(); 25 order.setOrderId(id); 26 order.setEmail(email); 27 return order; 28 } 29} 30

main関数のなかのfor文でtest1@gmail.comtest2@gmail.comにメール送信に成功したのですが、メールテンプレートの${order.orderId}にはそれぞれ1と2の数字が入るであろうと予想して実行したが、実行結果はどれも1になっていました。なぜこのような実行結果になるのか誰かわかる方教えてください。また、どうすれば複数人に別々の本文を送信できるのかも教えてくれるとうれしいです。

----------------------------OrderServiceの追記--------------------

java

1 2import com.websystique.spring.model.ProductOrder; 3 4public interface OrderService { 5 6 public void sendOrderConfirmation(ProductOrder productOrder); 7 8} 9

java

1 2import org.springframework.beans.factory.annotation.Autowired; 3import org.springframework.stereotype.Service; 4 5import com.websystique.spring.model.ProductOrder; 6 7@Service("orderService") 8public class OrderServiceImpl implements OrderService{ 9 10 @Autowired 11 MailService mailService; 12 13 @Override 14 public void sendOrderConfirmation(ProductOrder productOrder) { 15 mailService.sendEmail(productOrder); 16 } 17 18} 19

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

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

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

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

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

A-pZ

2016/10/25 08:17

OrderService をControllerから実行していますが、OrderService のコードが見当たりませんでしたので、追記していただくと回答が得られるかもしれません。
isacRu

2016/10/25 08:42

追記しました。
KSwordOfHaste

2016/10/25 12:07

メイン処理のfor文の範囲が1~2になってます。転記ミスでは?このままではArrayIndexOutOfBounds例外になると思います。
isacRu

2016/10/31 08:12

ありがとうございます。転記ミスでした。
guest

回答1

0

自己解決

大変お騒がせいたしました。メーラの設定が悪かったようです。

投稿2016/10/31 08:20

isacRu

総合スコア64

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問