先日Spring Mail(MailSenderクラス)を使用してメール送信する記事を書きましたが、Spring MailではHTMLメールを送信することが出来ません。

ですので、HTMLメールを送信したいときにはJavaメール(JavaMailSenderクラス)を使用します。HTMLメールであれば本文に画像を張り付けることや、リンク付きのボタンを載せることが出来ます。
今回はSpring BootでJavaメールを使用して、画像とリンクを含むHTMLメールを送信する方法をご紹介します。
pom.xml
まずはライブラリをダウンロードして使用する設定です。Spring Mail を使用したときにpom.xmlに記載した内容と同様です。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
メール情報設定
コントローラーのソースコードです。今回はコントローラーに、送信するメールの情報を設定する処理を記載します。下記のサンプルでは宛先1つで設定していますが、複数の宛先にメール送信したい場合には String[] で宛先を設定します。
このようにして設定した情報をメール送信処理に渡します。
@PostMapping(value = "/sendTestMail") @ResponseBody public boolean sendTestMail() { Map<String, String> sendMailInfo = new HashMap<String, String>(); sendMailInfo.put("toName", "宛先の名前"); sendMailInfo.put("toAddress","宛先のメールアドレス"); sendMailInfo.put("subject", "メールのタイトル"); sendMailInfo.put("link", "メール本文のリンク先アドレス"); return mailService.sendTestMail(sendMailInfo); }
メール送信処理
設定した情報をもとにメール処理を組みます。
package com.example.app.service; import java.io.IOException; import java.util.Map; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; @Service public class MailService { @Autowired private JavaMailSender javaMailSender; @Autowired ResourceLoader resourceLoader; public boolean sendTestMail(Map<String, String> sendMailInfo) { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = null; try { helper = new MimeMessageHelper(message, true); helper.setFrom(sendMailInfo.get("fromAddress")); helper.setTo(sendMailInfo.get("toAddress")); helper.setSubject("[" + sendMailInfo.get("action") + "] " + sendMailInfo.get("subject")); String insertMessage = "<html>" + "<head></head>" + "<body>" + "<h3>Hello " + sendMailInfo.get("toName") + "</h3>" + "<p><a href='" + sendMailInfo.get("link") + "'><img src='cid:logo'></a></p>" + "</body>" + "</html>"; helper.setText(insertMessage, true); Resource resourceLogo = resourceLoader.getResource("classpath:static/images/logo.png"); helper.addInline("logo", new FileSystemResource(resourceLogo.getFile())); javaMailSender.send(message); } catch (Exception e) { e.printStackTrace(); return false; } return true; } }
application.properties
最低限の設定は次のとおりです。localhostの部分はメールサーバーのアドレスにします。
spring.mail.host=localhost spring.mail.port=25
これで画像とリンクを含むHTMLメールを送信することが出来ます。
参考
org.springframework.mail.javamail JavaMailSender – spring.pleiades.io