概要 | パッケージ | クラス | 使用 | 階層ツリー | 非推奨 API | 索引 | ヘルプ
前のクラス 次のクラス | フレームあり フレームなし
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド

## com.ozacc.mail.fetch.impl.sk_jp
クラス MailUtility

    java.lang.Object
      com.ozacc.mail.fetch.impl.sk_jp.MailUtility

public class MailUtility
extends Object

JavaMailのサポートクラスです。

主にヘッダに対するさまざまな加工機能を提供します。

バージョン:
  $Revision: 1.1.2.1 $ $Date: 2005/01/18 07:20:59 $
作成者:
  Shin

メソッドの概要
`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(InternetAddress[] addresses)`
`static String` | `getFileName(Part part)` Part#getFileName()のマルチバイト対応版です。
`static String` | `getMailAddresses(InternetAddress[] addresses)` get comma separated E-Mail addresses.
`static String` | `getParameter(String header, String name)` ヘッダのパラメタ部のデコードを行います。
`static Message` | `getParentMessage(Part part)` パートを保有する親Messageオブジェクトを返します。
`static String` | `getPersonal(InternetAddress a)`
`static String` | `getPersonalNames(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 InternetAddress[]` | `parseAddresses(String addressesString)` 入力されたアドレスをInternetAddress形式に変換します。
`static InternetAddress[]` | `parseAddresses(String addressesString, boolean strict)`
`static Date` | `parseDate(String rfc822DateString)` Date構文の誤った"JST"タイムゾーンの補正を行います。
`static void` | `setFileName(Part part, String filename, String charset, String lang)` Part#setFileName()のマルチバイト対応版です。
`static void` | `setTextContent(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`

メソッドの詳細

### getPersonal

    public static String getPersonal(InternetAddress a)

### getMailAddresses

    public static String getMailAddresses(InternetAddress[] addresses)

  get comma separated E-Mail addresses.

### getPersonalNames

    public static String getPersonalNames(InternetAddress[] addresses)

  get comma separated personal names.

### getAddressesHTML

    public static String getAddressesHTML(InternetAddress[] addresses)

### getTransferEncoding

    public static String getTransferEncoding(byte[] b)

  get the Content-Transfer-Encoding: header value.

### getParentMessage

    public static Message getParentMessage(Part part)

  パートを保有する親Messageオブジェクトを返します。

  パラメータ:
    `part` - パート
  戻り値:
    ツリー構造の最上位にあたるメッセージオブジェクト

### parseDate

    public static Date parseDate(String rfc822DateString)

  Date構文の誤った"JST"タイムゾーンの補正を行います。

  JavaMailは"JST"と記述されるタイムゾーンを解釈しません。 ここは本来"+0900"でなければならないところです。
  仕方がないので" JST"が含まれる文字列の場合は"+0900"を補完して MailDateFormat#parse()を通すようなparse()のラッパを用意します。

  この実装は一時回避的なものであり、完全なものではありません。

### createReplySubject

    public static String createReplySubject(String src)

  Subject:に"Re: "を付加します。

  ある程度寛容に"Re: "に近い文字列と"[hoge]"を取り除きます。
  ただし、意図しない部分が消されてしまう事もあり得ます。
  JavaMailのreply()では"Re: "がエンコードされていた場合に 正しく"Re: "を取り除いてくれません。

### parseAddresses

    public static InternetAddress[] parseAddresses(String addressesString)
                                            throws AddressException

  入力されたアドレスをInternetAddress形式に変換します。

  "名無し君 (コメント)"等の文字列(エンコード無し)を 渡されても、正しくpersonal文字列が設定されるようにします。
  InternetAddress#parse()はエンコード済みの文字列を前提にしているため、 このメソッドの目的には沿いません。

  例外:
    `AddressException`

### parseAddresses

    public static InternetAddress[] parseAddresses(String addressesString,
                                                   boolean strict)
                                            throws AddressException

  例外:
    `AddressException`

### unfold

    public static String unfold(String source)

  header valueの unfolding を行います。 空白を厳密に扱うためには decodeText より先に呼び出す必要があります。

### fold

    public static String fold(String source,
                              int used)

  header valueの folding を行います。

  white spaceをfolding対象にします。
  76bytesを超えないwhite space位置に を挿入します。

  注:quoteを無視しますので、structured fieldでは不都合が 発生する可能性があります。

  パラメータ:
    `used` - ヘッダの':'までの文字数。76 - usedが最初のfolding候補桁
  戻り値:
    foldingされた( SPACEが挿入された)文字列

### setTextContent

    public static void setTextContent(Part p,
                                      String s)
                               throws MessagingException

  パートにテキストをセットします。 Part#setText() の代わりにこちらを使うことで、 "ISO-2022-JP" コンバータではエンコードできない CP932 の 文字をエンコードできます。

  例外:
    `MessagingException`

### encodeWordJIS

    public static String encodeWordJIS(String s)

  日本語を含むヘッダ用テキストを生成します。 変換結果は ASCII なので、これをそのまま setSubject や InternetAddress のパラメタとして使用してください。 "ISO-2022-JP" コンバータではエンコードできない CP932 の 文字をエンコードできます。ただし、encodeText() と異なり、 folding の意識をしておらず、また ASCII 部分を除いて分割 エンコードを行うこともできません。

### decodeText

    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
  戻り値:
    decoded text

### encodeText

    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
  戻り値:
    encoded text
  例外:
    `UnsupportedEncodingException`

### indexOfNonAscii

    public static int indexOfNonAscii(String source,
                                      int startIndex)

  指定位置から最初に見つかった非ASCII文字のIndexを返します。 startIndex が範囲外の場合は -1 を返します。 (IndexOutOfBoundsException ではない)

  パラメータ:
    `source` - 検索する文字列
    `startIndex` - 検索開始位置
  戻り値:
    検出した非ASCII文字Index。見つからなければ-1。

### indexOfNonLWSP

    public static int indexOfNonLWSP(String source,
                                     int startIndex,
                                     boolean decrease)

  指定位置から最初に見つかったLWSP以外の文字のIndexを返します。 startIndex が範囲外の場合は -1 を返します。 (IndexOutOfBoundsException ではない)

  パラメータ:
    `source` - 検索する文字列
    `startIndex` - 検索開始位置
    `decrease` - trueで後方検索
  戻り値:
    検出した非ASCII文字Index。見つからなければ-1。

### indexOfLWSP

    public static int indexOfLWSP(String source,
                                  int startIndex,
                                  boolean decrease,
                                  char additionalDelimiter)

  指定位置から最初に見つかったLWSPのIndexを返します。 startIndex が範囲外の場合は -1 を返します。 (IndexOutOfBoundsException ではない)

  パラメータ:
    `source` - 検索する文字列
    `startIndex` - 検索開始位置
    `decrease` - trueで後方検索
    `additionalDelimiter` - LWSP以外に区切りとみなす文字(1字のみ)
  戻り値:
    検出した非ASCII文字Index。見つからなければ-1。

### isLWSP

    public static boolean isLWSP(char c)

### setFileName

    public static void setFileName(Part part,
                                   String filename,
                                   String charset,
                                   String lang)
                            throws MessagingException

  Part#setFileName()のマルチバイト対応版です。 JavaMail1.2でなければコンパイルできません

  例外:
    `MessagingException`

### encodeParameter

    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` - 言語指定子
  戻り値:
    エンコード済み文字列 ";\r\n name*0*=ISO-8859-2''・・・;\r\n name*1*=・・"

### isAllAscii

    public static boolean isAllAscii(String text)

  check if contains only ascii characters in text.

### getFileName

    public static String getFileName(Part part)
                              throws MessagingException

  Part#getFileName()のマルチバイト対応版です。

  例外:
    `MessagingException`

### getParameter

    public static String getParameter(String header,
                                      String name)
                               throws ParseException

  ヘッダのパラメタ部のデコードを行います。

  RFC2231形式でfolding(分割)されたパラメタを結合し、デコードします。 尚、RFC2231にはパラメタの順番に依存するなと書かれていますが、 それを実装すると大変面倒(一度分割された全てのパートを 保持してソートしなければならない)なので、 シーケンス番号に関係なく(0から)順番に 並んでいるものとみなして処理することにします。

  パラメータ:
    `header` - ヘッダの値全体
    `name` - 取得したいパラメタ名
  戻り値:
    デコード済み文字列 (パラメタが存在しない場合は null)
  例外:
    `ParseException`

概要 | パッケージ | クラス | 使用 | 階層ツリー | 非推奨 API | 索引 | ヘルプ
前のクラス 次のクラス | フレームあり フレームなし
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド

Copyright © 2004-2005 OZACC. All Rights Reserved.