4

メールを送信するアプリケーションがあります。しかし、私の開発環境では、アプリケーションが電子メールを送信するのではなく、ログファイルにメッセージを出力するだけでよいのです。

私がこれを行うことができる偽のjavax.mail.Session実装がありますか?

4

3 に答える 3

4

この問題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);
}
于 2012-09-22T16:44:56.103 に答える
2

偽の実装を使用するようにローカルの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 またはアプリケーションの任意の場所に配置できます。

于 2013-03-22T09:58:22.020 に答える
1

まさにあなたが求めているものではありませんが、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>
于 2012-08-20T07:35:59.143 に答える