メールを送信するアプリケーションがあります。しかし、私の開発環境では、アプリケーションが電子メールを送信するのではなく、ログファイルにメッセージを出力するだけでよいのです。
私がこれを行うことができる偽のjavax.mail.Session
実装がありますか?
メールを送信するアプリケーションがあります。しかし、私の開発環境では、アプリケーションが電子メールを送信するのではなく、ログファイルにメッセージを出力するだけでよいのです。
私がこれを行うことができる偽のjavax.mail.Session
実装がありますか?
この問題javax.mail.Transport
では、SMTPプロトコルに登録されているカスタムを使用します。
最初にCustomTransportクラスを実装します
import javax.mail.Transport;
import javax.mail.*;
public class CustomTransport extends Transport {
public CustomTransport(Session smtpSession, URLName urlName) {
super(smtpSession, urlName);
}
@Override
public void sendMessage(Message message, Address[] addresses) throws MessagingException {
// Take the message and write it somewhere
// e.g.: a logger or an OutputStream message.writeTo(...);
}
@Override
public void connect() throws MessagingException {}
@Override
public void connect(String host, int port, String username, String password) throws MessagingException {}
@Override
public void connect(String host, String username, String password) throws MessagingException {}
@Override
public void close() {}
}
その後、そのCustomTransportを使用しjavax.mail.Session
て、定義された場所にメールを書き込むを作成できます。
public Session getMailSession(){
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.provider.class", CustomTransport.class.getName());
props.put("mail.smtp.provider.vendor", "foo");
props.put("mail.smtp.provider.version", "0.0.0");
return Session.getInstance(props);
}
偽の実装を使用するようにローカルのTomcatインストールを構成する場合は、Transport
セッションの実装は、ホーム lib フォルダーとクラスパス META-INF/javamail.providers からのみ構成をロードするようです。Session javadoc を参照してください。
Tomcat JNDIでメール セッションを構成する場合は、1 つのファイルを含む追加の JAR ファイルMETA-INF/javamail.providers
を Tomcat lib フォルダーにコピーするだけです。
$ mkdir META-INF
$ echo 'protocol=smtp; type=transport; class=CustomTransport;' > META-INF/javamail.providers
$ jar cf custom-transport.jar META-INF
$ cp custom-transport.jar $TOMCAT/lib/
上記のクラスCustomTransport
を同じ Jar またはアプリケーションの任意の場所に配置できます。
まさにあなたが求めているものではありませんが、GreenMailは SMTP、POP3、および IMAP プロトコルのテスト実装です。JUnit から GreenMail サーバーを起動し、受信したメールをクエリできます。このようにして、スタック全体を実行していますが、任意のポートでjavax.mail
実行されている偽のサーバーを使用しています。localhost
ライブラリはmavenで利用できます:
<dependency>
<groupId>com.icegreen</groupId>
<artifactId>greenmail</artifactId>
<version>1.3.1b</version>
<scope>test</scope>
</dependency>