先日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