2017-02-08 10 views
0

javax.mail:mailからcom.sun.mail:javax.mailに最近切り替えました。 次のコードが失敗したので:com.sun.mailに切り替えた後、ウムラウトでInternetAddressを使用します。javax.mail

new InternetAddress("[email protected]öllers.de", false).validate(); 

Caught: javax.mail.internet.AddressException: Domain contains control or whitespace in string ``[email protected]öllers.de'' 
javax.mail.internet.AddressException: Domain contains control or whitespace in string ``[email protected]öllers.de'' 

InternetAddress#validate()の実装は明らかに変化しています。 - 間違っている、例えば

else if (c <= 040 || c >= 0177) { 
    throw new AddressException(
      "Domain contains control or whitespace", addr); 

すべてチャーコントロールまたは空白として扱われ> = 177:CRLFチェックに関するいくつかの追加の行は、このスニペットが続きますウムラウトについては(ö= 246)。 例外メッセージは誤解を招きます。

validate()の変更によってバグが導入されましたか?

これまでのところ、インターネット電子メールアドレスにはpunycodeでエンコードされたウムラウトが含まれている可能性があります。それで、私はウムラウトで文字列を渡すのが安全だと思ったのです。

この場合、InternetAddressはエンコードされたStringで使用する予定ですか?ビルShannonsへのアップデートが答える

事前に

おかげ

私のコメントで述べきれいにフォーマットのGroovyスクリプト:

@GrabResolver(name='snapshots', root='https://maven.java.net/content/repositories/snapshots/', m2Compatible='true') 
@Grab("com.sun.mail:javax.mail:1.6.0-SNAPSHOT") 

import javax.mail.internet.InternetAddress 

new InternetAddress("[email protected]öllers.de", false) 

更新:最新のスナップショットでテスト

import org.junit.Test; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 

public class ValidateEmailTest { 

    @Test 
    public void test() throws AddressException { 
     new InternetAddress("[email protected]öllers.de", true).validate(); 
     new InternetAddress("[email protected]öllers.de", false).validate(); 
    } 
} 

テストは正常に実行されます(noドメイン名に非ASCII文字の火2月21

答えて

2

利用から、現在で最新のスナップショット1.6.0-SNAPSHOTで)AddressExceptionを投げるtはRFC 6530RFC 6531、およびRFC 6532のためのサポートが必要です。クライアントとサーバーの両方がこれらの新しい標準をサポートする必要があります。 JavaMail 1.6にこのようなサポートを追加しました。 JavaMail web pageに記載されているように、開発スナップショットのリリースをダウンロードすることができます。サーバーがSMTPUTF8拡張機能をサポートしていることを確認し、セッションプロパティーmail.mime.allowutf8trueに設定する必要があります。

国際化された電子メールアドレスの新しいサポートを、実際のメールサーバーを使用してテストできる場合は、[email protected]までお送りください。ありがとう。

+0

インフラストラクチャはまだ非ASCII文字をサポートしていません。 しかし、私はまだ次のGroovyスクリプトが失敗することに驚いています。 @GrabResolver(名= 'スナップショット'、ルート= 'HTTPS://maven.java.net/content/repositories/snapshots/'、m2Compatible = '真') @Grab(「com.sun.mail :のjavax.mail:1.6.0-SNAPSHOT ") 輸入javax.mail.internet.InternetAddress 新たInternetAddress(" [email protected]öllers.de」、偽) 私は現在のスナップショット1.6を使用しています。0と結果は次のとおりです。 javax.mail.internet.AddressException:ドメインは、文字列内のコントロールや空白が含まれている ''[email protected]öllers.de '' ありがとうございます。 –

+0

上記のスクリプトを元の質問に追加しました。 –

+0

私はGroovyについて何も知らないけど、実際には適切なJavaMail jarファイルがないと思う。同等の簡単なJavaプログラムは正常に動作します。 –

関連する問題