|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectcom.ozacc.mail.fetch.impl.sk_jp.MailUtility
public class MailUtility
JavaMailのサポートクラスです。
主にヘッダに対するさまざまな加工機能を提供します。
メソッドの概要 | |
---|---|
static String |
createReplySubject(String src)
Subject:に"Re: "を付加します。 |
static String |
decodeText(String source)
ヘッダ内の文字列をデコードします。 |
static String |
encodeParameter(String name,
String value,
String encoding,
String lang)
ヘッダのパラメタ部のエンコードを行います。 |
static String |
encodeText(String source,
String charset,
String encoding)
文字列をエンコードします。 |
static String |
encodeWordJIS(String s)
日本語を含むヘッダ用テキストを生成します。 |
static String |
fold(String source,
int used)
header valueの folding を行います。 |
static String |
getAddressesHTML(javax.mail.internet.InternetAddress[] addresses)
|
static String |
getFileName(javax.mail.Part part)
Part#getFileName()のマルチバイト対応版です。 |
static String |
getMailAddresses(javax.mail.internet.InternetAddress[] addresses)
get comma separated E-Mail addresses. |
static String |
getParameter(String header,
String name)
ヘッダのパラメタ部のデコードを行います。 |
static javax.mail.Message |
getParentMessage(javax.mail.Part part)
パートを保有する親Messageオブジェクトを返します。 |
static String |
getPersonal(javax.mail.internet.InternetAddress a)
|
static String |
getPersonalNames(javax.mail.internet.InternetAddress[] addresses)
get comma separated personal names. |
static String |
getTransferEncoding(byte[] b)
get the Content-Transfer-Encoding: header value. |
static int |
indexOfLWSP(String source,
int startIndex,
boolean decrease,
char additionalDelimiter)
指定位置から最初に見つかったLWSPのIndexを返します。 |
static int |
indexOfNonAscii(String source,
int startIndex)
指定位置から最初に見つかった非ASCII文字のIndexを返します。 |
static int |
indexOfNonLWSP(String source,
int startIndex,
boolean decrease)
指定位置から最初に見つかったLWSP以外の文字のIndexを返します。 |
static boolean |
isAllAscii(String text)
check if contains only ascii characters in text. |
static boolean |
isLWSP(char c)
|
static javax.mail.internet.InternetAddress[] |
parseAddresses(String addressesString)
入力されたアドレスをInternetAddress形式に変換します。 |
static javax.mail.internet.InternetAddress[] |
parseAddresses(String addressesString,
boolean strict)
|
static Date |
parseDate(String rfc822DateString)
Date構文の誤った"JST"タイムゾーンの補正を行います。 |
static void |
setFileName(javax.mail.Part part,
String filename,
String charset,
String lang)
Part#setFileName()のマルチバイト対応版です。 |
static void |
setTextContent(javax.mail.Part p,
String s)
パートにテキストをセットします。 |
static String |
unfold(String source)
header valueの unfolding を行います。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
public static String getPersonal(javax.mail.internet.InternetAddress a)
public static String getMailAddresses(javax.mail.internet.InternetAddress[] addresses)
public static String getPersonalNames(javax.mail.internet.InternetAddress[] addresses)
public static String getAddressesHTML(javax.mail.internet.InternetAddress[] addresses)
public static String getTransferEncoding(byte[] b)
public static javax.mail.Message getParentMessage(javax.mail.Part part)
part
- パート
public static Date parseDate(String rfc822DateString)
JavaMailは"JST"と記述されるタイムゾーンを解釈しません。 ここは本来"+0900"でなければならないところです。
仕方がないので" JST"が含まれる文字列の場合は"+0900"を補完して
MailDateFormat#parse()を通すようなparse()のラッパを用意します。
この実装は一時回避的なものであり、完全なものではありません。
public static String createReplySubject(String src)
ある程度寛容に"Re: "に近い文字列と"[hoge]"を取り除きます。
ただし、意図しない部分が消されてしまう事もあり得ます。
JavaMailのreply()では"Re: "がエンコードされていた場合に 正しく"Re: "を取り除いてくれません。
public static javax.mail.internet.InternetAddress[] parseAddresses(String addressesString) throws javax.mail.internet.AddressException
"名無し君
InternetAddress#parse()はエンコード済みの文字列を前提にしているため、 このメソッドの目的には沿いません。
addresses
- メイルアドレス文字列(カンマ区切り)
javax.mail.internet.AddressException
public static javax.mail.internet.InternetAddress[] parseAddresses(String addressesString, boolean strict) throws javax.mail.internet.AddressException
javax.mail.internet.AddressException
public static String unfold(String source)
public static String fold(String source, int used)
white spaceをfolding対象にします。
76bytesを超えないwhite space位置に
注:quoteを無視しますので、structured fieldでは不都合が 発生する可能性があります。
used
- ヘッダの':'までの文字数。76 - usedが最初のfolding候補桁
public static void setTextContent(javax.mail.Part p, String s) throws javax.mail.MessagingException
javax.mail.MessagingException
public static String encodeWordJIS(String s)
public static String decodeText(String source)
MimeUtilityの制約を緩めて日本で流通するエンコード形式に対応。 本来は、encoded-wordとnon-encoded-wordの間にはlinear-white-spaceが必要 なのですが、空白が無い場所でエンコードするタコメイラが多いので。
JISコードをエンコード無しで記述するタコメイラもあります。
ソースにESCが含まれていたら生JISと見なします。
=?utf-8?Q?・・・JISコード・・?=なんてさらにタコなメイラも。
試しにデコード後にまだESCが残ってたらISO-2022-JPと見なすことにします。
さらに、multibyte character の前後で別の encoded-word に切ってしまう メイラも…。隣接する encoded-word の CES が同じ場合はバイト列の 結合を行ってから CES デコードを行うようにした…。
日本語に特化してますねえ・・・。
source
- encoded text
public static String encodeText(String source, String charset, String encoding) throws UnsupportedEncodingException
MimeUtility(強いてはMimeMessage等も)では、1字でも非ASCII文字が含まれる
と文字列全体をエンコードしてしまいます。
このメソッドでは空白で区切られた範囲だけをエンコードします。
Subjectの"Re: "等がエンコードされていると、この文字列でIn-Reply-To:
References:の代わりにスレッドを形成しようとしても失敗することになる
ため、こちらのエンコード方式を用いたがる人もいるかもしれません・・。
方針は、ASCII部に前後の空白一つを含ませ、それ以外は空白も含めて全て encoded-wordとします。()の内側は空白無しでもエンコード対象です。
source
- text
UnsupportedEncodingException
public static int indexOfNonAscii(String source, int startIndex)
source
- 検索する文字列startIndex
- 検索開始位置
public static int indexOfNonLWSP(String source, int startIndex, boolean decrease)
source
- 検索する文字列startIndex
- 検索開始位置decrease
- trueで後方検索
public static int indexOfLWSP(String source, int startIndex, boolean decrease, char additionalDelimiter)
source
- 検索する文字列startIndex
- 検索開始位置decrease
- trueで後方検索additionalDelimiter
- LWSP以外に区切りとみなす文字(1字のみ)
public static boolean isLWSP(char c)
public static void setFileName(javax.mail.Part part, String filename, String charset, String lang) throws javax.mail.MessagingException
javax.mail.MessagingException
public static String encodeParameter(String name, String value, String encoding, String lang)
現状は受信できないものが多いのでこのメソッドだけでは使えません。
Content-Disposition:のfilenameのみに使用し、さらに Content-Type:のnameにMIME
encodingでの記述も行うのが妥当でしょう。
パラメタは必ず行頭から始まるものとします。 (ヘッダの開始行から折り返された位置を開始位置とします)
foldingの方針はascii/non ascii境界のみをチェックします。 現状は連続するascii/non asciiの長さのチェックは現状行っていません。 (エンコード後のバイト数でチェックしなければならないのでかなり面倒)
name
- パラメタ名value
- エンコード対象のパラメタ値encoding
- 文字エンコーディングlang
- 言語指定子
public static boolean isAllAscii(String text)
public static String getFileName(javax.mail.Part part) throws javax.mail.MessagingException
javax.mail.MessagingException
public static String getParameter(String header, String name) throws javax.mail.internet.ParseException
RFC2231形式でfolding(分割)されたパラメタを結合し、デコードします。 尚、RFC2231にはパラメタの順番に依存するなと書かれていますが、 それを実装すると大変面倒(一度分割された全てのパートを 保持してソートしなければならない)なので、 シーケンス番号に関係なく(0から)順番に 並んでいるものとみなして処理することにします。
header
- ヘッダの値全体name
- 取得したいパラメタ名
javax.mail.internet.ParseException
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |