環境
- Java 21
- SpringBoot 3.1.3
メール送信する方法
pom.xml
なければ追加しましょう。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.properties
application.propertiesに以下を追加します。
今回使用するメールアドレスはhotmailのアカウントです。
Office365, Outlook アカウントの場合は smtp.office365.com に変更してください。
spring.mail.host=smtp-mail.outlook.com
spring.mail.port=587
spring.mail.username=自分のメールアドレス
spring.mail.password=パスワード
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
Java
次にコードです。
@Valueでapplication.propertiesの自分のメールアドレスを取得しています。
あとは宛先、件名、本文を設定して送信するだけです。
@Service
@Slf4j
public class MailService {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String mailAddress;
public void sendMail(String toMailAddress, String subject, String body) {
SimpleMailMessage simpleMsg = new SimpleMailMessage();
simpleMsg.setTo(toMailAddress);
simpleMsg.setFrom(mailAddress);
simpleMsg.setSubject(subject);
simpleMsg.setText(body);
mailSender.send(simpleMsg);
}
}
メール本文をテンプレート化
コードに埋め込みで本文を書いてもいいのですが、大体の場合はテンプレートを使用すると思います。
今回はThymeleafを使用してテキストファイルに書かれた本文をメールで送信できるようにしていきます。
まずはメール本文となるテキストファイルです。
配置場所は src/main/resoucres/mail/mail_template.txt です
[(${toName})]様
お疲れ様です。
[(${fromName})]です。
うんたらかんたら
このように変更したい部分を変数で指定していきます。
あとはこのテキストファイルを読み込み値を埋め込むコードを書きます。
public void sendMailTemplate(String toMailAddress, String toName, String fromName) {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode(TemplateMode.TEXT);
templateResolver.setCharacterEncoding("UTF-8");
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver);
Map<String, Object> variables = new HashMap<>();
variables.put("toName", toName);
variables.put("fromName", fromName);
Context context = new Context();
context.setVariables(variables);
String body = engine.process("/mail/mail_template.txt", context);
sendMail(toMailAddress, "件名", body);
}
以上です。
コメント