1概要

この記事では、プレーンな通常のSpringアプリケーションからも、Spring Bootアプリケーションからも電子メールを送信するために必要な手順について説明します。[JavaMail]ライブラリと後者は

spring-boot-starter-mail

依存関係を使っています。


2 Mavenの依存関係

まず、

pom.xml

に依存関係を追加する必要があります。


2.1. 春

プレーンなvanilla Springフレームワークで使用するために、以下を追加します。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.0.1-RELEASE</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cspring-context-support[here]にあります。


2.2. 春のブーツ

そして春のブーツのために:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.0.1.RELEASE</version>
</dependency>

最新版はhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.springframework.boot%22%20AND%20a%3A%22spring-boot-starter-で入手できます。 mail%22[Maven Central]リポジトリ。


3メールサーバーのプロパティ

SpringフレームワークにおけるJavaメールサポートのためのインタフェースとクラスは次のように構成されています。



  1. MailSender

    interface

    :基本を提供する最上位インタフェース

簡単なEメールを送信するための機能



JavaMailSender

interface

:上記のサブインタフェース


MailSender

。 MIMEメッセージをサポートし、主にで使用されています
を作成するための

MimeMessageHelper

クラスとの組み合わせ

MimeMessage



MimeMessagePreparator

を使用することをお勧めします
このインタフェースの仕組み



JavaMailSenderImpl

class

:の実装を提供します。


JavaMailSender

インターフェース。それは

MimeMessage



SimpleMailMessage




SimpleMailMessage

class

:単純なメールメッセージを作成するために使用されます。

from、to、cc、件名、およびテキストフィールドを含む



MimeMessagePreparator

interface

:コールバックインタフェースを提供します。

MIMEメッセージの準備



MimeMessageHelper

class

:MIME作成用のヘルパークラス

メッセージHTMLレイアウトの画像、一般的なメール添付ファイル、およびテキストコンテンツをサポート

次のセクションでは、これらのインタフェースとクラスの使い方を説明します。


3.1. Spring Mail Serverのプロパティ

指定に必要なメールプロパティSMTPサーバーは

JavaMailSenderImpl

を使用して定義できます。

たとえばGmailの場合、これは次のように設定できます。

@Bean
public JavaMailSender getJavaMailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("smtp.gmail.com");
    mailSender.setPort(587);

    mailSender.setUsername("[email protected]");
    mailSender.setPassword("password");

    Properties props = mailSender.getJavaMailProperties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.debug", "true");

    return mailSender;
}


3.2. Spring Bootメールサーバのプロパティ

依存関係が整ったら、次のステップは、

spring.mail。**

名前空間を使用して

application.properties

ファイルにメールサーバーのプロパティを指定することです。

たとえば、Gmail SMTP Serverのプロパティは次のように指定できます。

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=<login user to smtp server>
spring.mail.password=<login password to smtp server>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

一部のSMTPサーバーはTLS接続を必要とするため、

spring.mail.properties.mail.smtp.starttls.enable

プロパティを使用してTLS保護された接続を有効にします。


3.2.1. Gmail SMTPプロパティ

Gmail SMTPサーバー経由でEメールを送信できます。

https://support.google.com/mail/answer/13273?hl=jaをご覧ください。


application.the properties

ファイルは、Gmail SMTPを使用するように既に設定されています(前のセクションを参照)。

アカウントのパスワードは通常のパスワードではなく、Googleアカウント用に生成されたアプリケーションパスワードにしてください。


link

に従って詳細を確認し、Googleアプリのパスワードを生成してください。


3.2.2. SES SMTPプロパティ

Amazon SESサービスを使用してEメールを送信するには、以下のように

application.properties

を設定します。

spring.mail.host=email-smtp.us-west-2.amazonaws.com
spring.mail.username=username
spring.mail.password=password
spring.mail.properties.mail.transport.protocol=smtp
spring.mail.properties.mail.smtp.port=25
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

Amazonでは、使用する前に認証情報の確認を求めています。

link

に従って、ユーザー名とパスワードを確認してください。


4メールを送る

依存関係の管理と設定が完了したら、前述の

JavaMailSender

を使用して電子メールを送信できます。

プレーンなバニラスプリングフレームワークとそのブートバージョンはどちらも電子メールの作成と送信を同じように処理するので、以下のサブセクションで2つを区別する必要はありません。


4.1. 簡易メールの送信

まず、添付ファイルなしで簡単な電子メールメッセージを作成して送信しましょう。

@Component
public class EmailServiceImpl implements EmailService {

    @Autowired
    public JavaMailSender emailSender;

    public void sendSimpleMessage(
      String to, String subject, String text) {
        ...
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        emailSender.send(message);
        ...
    }
}


4.2. 添付ファイル付きのメールの送信

Springの単純なメッセージングでは、私たちのユースケースには不十分な場合があります。

たとえば、請求書を添付した注文確認メールを送信します。この場合、

SimpleMailMessage

の代わりに

JavaMail

ライブラリからの

MIME

マルチパートメッセージを使用する必要があります。 Springは

org.springframework.mail.javamail.MimeMessageHelper

クラスで

JavaMail

メッセージングをサポートしています。

まず最初に、添付ファイル付きのEメールを送信するためのメソッドを

EmailServiceImpl

に追加します。

@Override
public void sendMessageWithAttachment(
  String to, String subject, String text, String pathToAttachment) {
   //...

    MimeMessage message = emailSender.createMimeMessage();

    MimeMessageHelper helper = new MimeMessageHelper(message, true);

    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(text);

    FileSystemResource file
      = new FileSystemResource(new File(pathToAttachment));
    helper.addAttachment("Invoice", file);

    emailSender.send(message);
   //...
}


4.3. 簡易メールテンプレート


SimpleMailMessage

クラスはテキストフォーマットをサポートします。私たちの設定でテンプレートBeanを定義することでEメール用のテンプレートを作成できます。

@Bean
public SimpleMailMessage templateSimpleMessage() {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setText(
      "This is the test email template for your email:\n%s\n");
    return message;
}

これで、このBeanを電子メールのテンプレートとして使用でき、必要なパラメータをテンプレートに提供するだけで済みます。

@Autowired
public SimpleMailMessage template;
...
String text = String.format(template.getText(), templateArgs);
sendSimpleMessage(to, subject, text);


5送信エラーの処理


JavaMail

は、メッセージを送信できない場合の状況に対処するために

SendFailedException

を提供します。ただし、間違ったアドレスにメールを送信している間は、この例外が発生することはありません。その理由は次のとおりです。

RFC 821のSMTPのプロトコル仕様では、誤ったアドレスにEメールを送信しようとしたときにSMTPサーバーが返す550の戻りコードが指定されています。しかし、ほとんどのパブリックSMTPサーバーはこれを行いません。

代わりに、彼らはあなたのボックスに “配達失敗”のEメールを送るか、あるいはまったくフィードバックを与えません。

たとえば、Gmail SMTPサーバーは「配信失敗」メッセージを送信します。そして、あなたはあなたのプログラムで例外を受けません。

したがって、このケースを処理するために通過できるオプションはいくつかあります。

  1. スローされることはありません

    SendFailedException

    をキャッチします.

  2. 一定期間、「配信に失敗しました」メッセージで送信者のメールボックスを確認してください.

時間のこれは簡単ではなく、期間はそうではありません。
決定
。あなたのメールサーバが全くフィードバックを与えないなら、あなたは何もすることができません。


6. 結論

この簡単な記事では、Spring Bootアプリケーションから電子メールを設定して送信する方法を示しました。

これらすべての例とコードスニペットの実装は


GitHubプロジェクト


にあります。これはMavenベースのプロジェクトなので、そのままインポートして実行するのは簡単なはずです。