メール送信の停止方法

今回はintra-martのAPIを使ったメール送信の停止方法について紹介します。

背景

運用テストなどでメール送信のテストを行う際には、メールを対象ユーザに送信しないようにしなければなりません。

その方法として、メールサーバを停止するなどが挙げられます。

ですがこれだと、メール送信自体は止めていないので、テストを行う際に下記のようなエラーが余計にログに出力されてしまいます。

[ERROR] j.c.i.s.m.t.a.LocalThreadTaskExecutor - [E.IWP.MESSAGEHUB.ASYNCRONOUS.00009] 非同期タスクの実行に失敗しました。

これによって、他のログが見にくくなってしまいます。

なので、このエラーを表示させないために、下記のメール送信リスナを使ってメール送信自体を止める方法をご紹介します。

MailSendListener (javadoc-all-dev 8.0.0 API)

使用方法

使用するには以下の2点の設定を行います。

  • MailSendListenerの実装クラスを作成
  • javamail-config.xmlファイルにlistenerタグを設定

MailSendListenerの実装クラスを作成

任意のパッケージ下にクラスを設定します。

package jp.co.gsol.mailsend.control;

import jp.co.intra_mart.foundation.mail.MailSenderException;
import jp.co.intra_mart.foundation.mail.javamail.listener.MailSendEvent;
import jp.co.intra_mart.foundation.mail.javamail.listener.MailSendListener;

public class MailSendControl implements MailSendListener {

    @Override
    public int onSendMail(MailSendEvent event) throws MailSenderException {
        return STOP_MAILSEND;
    }
}

今回はメール送信を停止させたいので、returnにはSTOP_MAILSENDを設定します。

ちなみにこのリスナでは戻り値をCONTINUEにすればメール送信され、また任意の処理が実行可能です。 メール件名や宛先をログ出力させることもできたりします。

詳細は上記のドキュメントを確認してみてください。

javamail-config.xmlにlistenerタグを設定

作成したクラスをjavamail-config.xmlファイルに以下のように追記します。 ドキュメントは下記を参考にしてください。

メール設定 — 設定ファイルリファレンス   第30版 2022-06-01   intra-mart Accel Platform

 <listener>
   <listener-class> jp.co.gsol.mailsend.control.MailSendControl</listener-class>
 </listener>

これで設定は完了です。

まとめ

今回はメール送信リスナを使い、メール送信自体を止める方法について紹介しました。

これを設定しておけばエラーログを出力せずに運用テストをすることができるので、気になる方はぜひ試してみてください。