1

Javaを介してメールを送信する必要があります。InternetAddressのPersonal(送信者名)は任意のUTF8文字列にすることができます。私の電子メールアドレス文字列には個人が含まれる場合と含まれない場合があるため、適切なInternetAddressを構築するためにInternetAddress(String)コンストラクターのみを使用しています。

InternetAddress sender = new InternetAddress( "s\u00E8nder <from@example.org>" );
sender.setPersonal( sender.getPersonal(), Charsets.UTF_8.name() );

私の理解では(テストはこれをサポートしているようです)、基本的なInternetAddressコンストラクターはPersonalエンコーディングを実行しないため、MIMEに準拠してPersonalをエンコードする追加の手順でこれを実行しています。

私の質問は、この手順が特定の状況で失敗する可能性があるかどうかです。javadocは、デコードが失敗した場合、.getPersonal()が生データを返す可能性があると述べています。しかし、これは本当に起こり得るのでしょうか?そして、失敗した場合、javadocがsetPersonalにASCII以外のコードが含まれている場合にのみエンコードを行うように指示しているように、問題が発生しますが、rawdataはそれを行いません。

4

1 に答える 1

3

使用しているコンストラクターは、電子メールヘッダーから読み取る場合と同様に、アドレス文字列が既に適切にエンコードされていることを前提としています。電子メールアドレスと個人名のフィールドを別々に維持し、それらを別々の引数として受け取るコンストラクターを使用する必要があります。個人名がない場合は、nullを渡すことができます。

toUnicodeStringメソッドで使用している形式の文字列を取得できますが、そのような文字列を解析する方法はありません。

于 2012-09-18T18:13:51.450 に答える