3

apache commons smtp ライブラリを使用して、gmail アカウントを使用してメールを送信しています。すべて正常に動作しますが、Message-Id ヘッダーが送信されており、それを削除しようとしています (送信されていません)。ネットを掘り下げると、オラクルのドキュメントで何かが見つかりました: http://www.oracle.com/technetwork/java/faq-135477.html#msgid

class MyMessage extends MimeMessage {
    ...

    protected void updateMessageID() throws MessagingException {
    setHeader("Message-ID", "my-message-id");
    }
    ...
}

ただし、Apache Commons でこれを実装する方法がわかりません。

これが私のコードです:

Email email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();

基本的には のようなものが必要ですがemail.setMimeMessage(...)、そのような方法はなく、email.getMimeMessage()

更新 - 解決策が見つかりました

public class MyEmail extends SimpleEmail{

    protected MimeMessage createMimeMessage(Session aSession)
    {
        return new MyMessage(aSession);
    }
}

メソッドをオーバーライドして、独自の実装createMimeMessageを返すようにするだけです(この場合)MimeMessageMyMessage

4

2 に答える 2

3

Email クラスには、カスタマイズされた MimeMessage を作成するための Factory メソッドがあります。これは、派生クラスによって実装できます (メッセージ ID を設定するなど)。

メッセージ ID を設定するために、このメソッドを拡張できます。次のコードは、カスタマイズされたメッセージ ID で htmlEmail メッセージを作成します。

HtmlEmail email = new HtmlEmail()
                    {
                        protected MimeMessage createMimeMessage(Session aSession)
                        {
                            return new MimeMessage(aSession)
                                    {
                                        protected void updateHeaders () throws MessagingException
                                        {                     
                                            super.updateHeaders ();
                                            super.setHeader ("Message-ID", "my-message-id");
                                        }
                                    };
                        }
                    };
于 2014-12-01T13:11:05.743 に答える
2

考えられる問題は、'Email' がヘッダーをコミットするためsaveChanges()に基礎となるメソッドを呼び出し、それが Message-ID ヘッダーを挿入する を呼び出すメソッドを呼び出すことです。MimeMessageupdateHeaders()updateMessageID()

MimeMessage を制御できる java.mail API のみを使用して電子メールを送信してみませんか? コードはすでに利用可能です

于 2013-03-28T16:40:01.740 に答える