本ブログはアフィリエイト広告を利用しています。

SpringBootでメール送信する

環境

  • 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);
}

以上です。

コメント

タイトルとURLをコピーしました