<code>class <a name="TMail%3a%3aMail">TMail::Mail</a> </code>

# `class TMail::Mail`

## クラスメソッド

`new(port = TMail::StringPort.new, config = DEFAULT_CONFIG)` → `TMail::Mail`

  port: TMail::Port
  config: TMail::Config

  `port` から `Mail` オブジェクトを作成します。

`load(filename)` → `TMail::Mail`

  filename: String

  ファイル `filename` からメールをロードして `Mail` オブジェクトを作成します。 ロードするファイルは MH のメールのようにメール一通がファイルひとつに 対応していなければいけません。

  UNIX mbox のような形式は単独では対応していません。 メールボックスクラスを使ってください。

`parse(str)` → `TMail::Mail`

  str: String

  文字列 `str` をパースして `TMail::Mail` オブジェクトを作成します。 `str` はメール一通分でなければいけません。

## インスタンスメソッド

`port` → `TMail::Port`

  このメールオブジェクトの生成元のポートです。

`body_port` → `TMail::Port`

  メール本文を保存しているポートを返します。

  ただしここに書きこんでもロード元のファイル(や文字列)は変更されません。 実際に変更するためにはこのポートに書きこんだ後 `#write_back` を呼ぶ 必要があります。

`each {|line| .... }`

  line: String

  本文文字列の各行に対する繰り返し。 `body_port.ropen {|f| f.each }` と同じです。

`body` → `String`
`preamble` → `String`

  メールボディ(本文)全てを文字列として返します。 MIME マルチパートメールのときは `preamble` に相当します。 この返り値を変更してもオリジナルは変更されません。

`parts` → `[TMail::Mail]`

  メールが MIME マルチパートメールの時、各パートが `TMail::Mail` の配列として 格納されています。マルチパートメールでないときは空の配列です。

  ただしここに書きこんでもロード元のファイル(や文字列)は変更されません。 実際に変更するためにはこのオブジェクトに書きこんだあと `#write_back` を 呼ぶ必要があります。

`epilogue` → `String`

  MIME マルチパートメールでの `epilogue` に相当する文字列です。 通常のメールのときは空文字列が入っています。

  ただしここに書きこんでもロード元のファイル(や文字列)は変更されません。 実際に変更するためには書きこんだ後 `#write_back` を呼ぶ必要があります。

`multipart?`

  メールが MIME マルチパートのとき真。 このメソッドは `Content-Type` ヘッダの内容で真偽を判断します。

`encoded(eol = "\n", encoding = 'j')` → `String`

  eol: String
  encoding: String

  メールを `RFC2822` 形式にエンコードした文字列に変換します。 その際、ヘッダの行末コードを `eol` に、ヘッダ内のエンコード前の 日本語文字列の文字コードを `encoding` に変換します。 ただし現在 `encoding` は `"j" (JIS)` しか正常に動作しません。

  バージョン `0.9` からは `#to_s` は `#decoded` の別名になったので、この メソッドとは違うはたらきをします。

`decoded(eol = "\n", encoding = 'e')` → `String`
`to_s(eol = "\n", encoding = 'e')` → `String`

  eol: String
  encoding: String

  メールをデコードされた文字列に変換します。その際、ヘッダの行末 コードを `eol` に、ヘッダ内のエンコード前の日本語文字列の文字コードを `encoding` に変換します。

  バージョン `0.9` 以降は `#to_s` はこのメソッドの別名になりました。

`inspect` → `String`

  以前は `#decoded` の別名でしたがバージョン `0.9` からは `"#<TMail::Mail port=<StringPort:str=...>>"` のような簡潔な文字列化を行います。

`write_back(eol = "\n", encoding = 'e')`

  eol: String
  encoding: String

  メール全体を文字列化し `body_port` に書き戻します。その際、ヘッダの 行末コードを `eol` に、ヘッダ内の日本語文字列の文字コードを `encoding` に 変換します。

### 属性アクセスのためのメソッド

`date(default = nil)` → `Time`
`date=(datetime)`

  datetime: Time
  default: Object

  `Date:` ヘッダに対応する `Time` オブジェクト。 常にローカルタイムに変換されます。

`strftime(format, default = nil)` → `String`

  format: String
  default: Object

  `Date:` ヘッダに表現された時刻と対応する `Time` オブジェクトに対し `strftime` を呼びます。`Date:` ヘッダが存在しない場合は `default` を 返します。

`to(default = nil)` → `[String]`
`to=(specs)`

  specs: String | [String]
  default: Object

  `To:` アドレスの `spec` の配列。

`to_addrs(default = nil)` → `[TMail::Address | TMail::AddressGroup]`
`to_addrs=(addrs)`

  addrs: TMail::Address | [TMail::Address]
  default: Object

  `To:` アドレスの配列。

`cc(default = nil)` → `[String]`
`cc=(specs)`

  specs: String | [String]
  default: Object

  `Cc:` アドレスの `spec` の配列。

`cc_addrs(default = nil)` → `[TMail::Address]`
`cc_addrs=(addrs)`

  addrs: TMail::Address | [TMail::Address]
  default: Object

  `Cc:` アドレスの配列。

`bcc(default = nil)` → `[String]`
`bcc=(specs)`

  specs: String | [String]
  default: Object

  `Bcc:` アドレスの `spec` の配列。

`bcc_addrs(default = nil)` → `[TMail::Address]`
`bcc_addrs=(addrs)`

  addrs: TMail::Address | [TMail::Address]
  default: Object

  `Bcc:` アドレスの配列。

`from(default = nil)` → `[String]`
`from=(specs)`

  specs: String | [String]
  default: Object

  `From:` アドレスの `spec` の配列。

`from_addrs(default = nil)` → `[TMail::Address]`
`from_addrs=(addrs)`

  addrs: TMail::Address | [TMail::Address]
  default: Object

  `From:` アドレスの配列。

`friendly_from(default = nil)` → `String`

  default: Object

  `From:` の最初のアドレスの `phrase` または `spec`。 `From:` が存在しないときは `default` を返します。

`reply_to(default = nil)` → `[String]`
`reply_to=(specs)`

  specs: String | [String]
  default: Object

  `Reply-To:` アドレスの `spec` の配列。

`reply_to_addrs(default = nil)` → `[TMail::Address]`
`reply_to_addrs=(addrs)`

  addrs: TMail::Address | [TMail::Address]
  default: Object

  `Reply-To:` アドレスの配列。

`sender(default = nil)` → `String`
`sender=(spec)`

  spec: String

  `Sender:` アドレスの `spec`

`sender_addr(default = nil)` → `TMail::Address`
`sender_addr=(addr)`

  addr: TMail::Address

  `Sender:` アドレス

`subject(default = nil)` → `String`
`subject=(sbj)`

  sbj: String

  `Subject:` の内容。 `Subject:` が存在しないときは `default` を返します。

`message_id(default = nil)` → `String`
`message_id=(id)`

  id: String

  メールのメッセージ `ID`。

`in_reply_to(default = nil)` → `[String]`
`in_reply_to=(ids)`

  ids: String | [String]

  `In-Reply-To:` に含まれるメッセージ `ID` のリスト。

`references(default = nil)` → `[String]`
`references=(ids)`

  ids: String | [String]

  `References:` に含まれるメッセージ `ID` のリスト。 現在は `References:` にはメッセージ `ID` 以外は 含められません。`(RFC2822)`

`mime_version(default = nil)` → `String`
`mime_version=(ver)`

  ver: String

  MIME バージョン。現在は常に `"1.0"` です。 ヘッダが存在しない場合は `default` を返します。

`set_mime_version(major, minor)`

  major: Integer
  minor: Integer

  MIME バージョンをセットします。

`content_type(default = nil)` → `String`

  メール本体のファイルタイプを示す文字列。例えば `"text/plain"`。 ヘッダが存在しない場合は `default` を返します。

`main_type(default = nil)` → `String`

  メール本体のメインタイプ (例：`"text")`。 常に小文字に統一されます。 ヘッダが存在しない場合は `default` を返します。

`sub_type(default = nil)` → `String`

  メール本体のサブタイプ (例：`"plain")`。 常に小文字に統一されます。 ヘッダが存在しない場合は `default` を返します。

`content_type=(ctype)`

  ctype: String

  `Content-Type` のメインタイプ・サブタイプを `main_sub` からセット します。`main_sub` は例えば `"text/plain"` のような形式でなければ いけません。

`set_content_type(main, sub, params = nil)`

  main: String
  sub: String
  params: {String => String}

  コンテントタイプを `main/sub; param; param; ...` のように設定します。

`type_param(name, default = nil)` → `String`

  name: String

  `Content-Type` の `name` パラメータの値を返します。 `name` に対応する値やヘッダそのものが存在しない場合は `default` を 返します。

      # example
      mail['Content-Type'] = 'text/plain; charset=iso-2022-jp'
      p mail.type_param('charset')   # "iso-2022-jp"

`multipart?` → `true | false`

  `Content-Type` が MIME マルチパートメールであることを 示す内容ならば真。

`transfer_encoding(default = nil)` → `String`
`transfer_encoding=(encoding)`

  encoding: String

  転送時に適用したエンコーディング `(Content-Transfer-Encoding)`。 `'7bit' '8bit' 'Base64' 'Binary'` など。

`disposition(default = nil)` → `String`
`disposition=(pos)`

  pos: String

  `Content-Disposition` の主値 (文字列)。返り値は常に小文字に統一されます。 `name` に対応する値やヘッダそのものが存在しない場合は `default` を 返します。

      # example
      mail['Content-Disposition'] = 'attachement; filename="test.rb"'
      p mail.disposition   # "attachment"

`set_content_disposition(pos, params = nil)`

  pos: String
  params: {String => String}

  `disposition` 文字列とパラメータのハッシュから `Content-Disposition` を セットします。

`disposition_param(key, default = nil)` → `String`

  key: String

  `Content-Disposition` の付加パラメータの `name` の値を取得します。 `name` に対応する値やヘッダそのものが存在しない場合は `default` を 返します。

      # example
      mail.disposition_param('filename')

`destinations(default = nil)` → `[String]`

  `To`、`Cc`、`Bcc` すべてのアドレススペック文字列の配列を 返します。ひとつも存在しなければ `default` を返します。

`reply_addresses(default = nil)` → `[TMail::Address]`

  返信すべきアドレスを判断し、`Address` オブジェクトの 配列で返します。返信すべきアドレスがみつからなければ `DEFAULT` を返します。

`error_reply_addresses(default = nil)` → `[TMail::Address]`

  エラーメールを返送すべきアドレスを判断し、`Address` オブジェクトの 配列で返します。返送すべきアドレスがみつからなければ `default` を返します。

### ヘッダフィールド直接操作用メソッド

`clear`

  ヘッダを全て消去します。

`keys` → `[TMail::HeaderField]`

  ヘッダ名の配列を返します。

`[](name)` → `TMail::HeaderField`

  name: String

  ヘッダ名からヘッダオブジェクトを返します。

`[]=(name, field)`

  name: String
  field: TMail::HeaderField

  `name` ヘッダに `field` を設定します。`field` は文字列か `TMail::HeaderField` オブジェクトです。 `Received` など一部のヘッダに対してはさらにその配列も与えることができます。

`delete(name)`

  name: String

  `name` ヘッダを消します。

`delete_if {|name, field| .... }`

  name: String
  field: TMail::HeaderField

  ヘッダ名とヘッダを与えてブロックを評価し、真ならその関連づけを消します。

`each_header {|name, field| .... }`
`each_pair {|name, field| .... }`

  name: String
  field: TMail::HeaderField

  全てのヘッダ名とヘッダオブジェクトに対するくりかえし。

`each_header_name {|name| .... }`
`each_key {|name| .... }`

  name: String

  全てのヘッダ名に対するくりかえし。

`each_field {|field| .... }`
`each_value {|field| .... }`

  field: TMail::HeaderField

  全てのヘッダオブジェクトに対するくりかえし。 ヘッダの順序指定付きの `each_header` です。最初に指定したものが指定した 順番で並び、その他のヘッダがランダムに続きます。順序は文字列の配列 `TMail::Mail::FIELD_ORDER` で設定してください(詳細はソースコードを参照)。

`key?(name)`

  name: String

  `name` ヘッダがあれば真。

`value?(field)`

  field: TMail::HeaderField

  `field` ヘッダオブジェクトがあれば真。

`values_at(*names)` → `[TMail::HeaderField]`
`indexes(*names)` → `[TMail::HeaderField]`
`indices(*names)` → `[TMail::HeaderField]`

  names: [String]

  全ての `names` について `fetch` した結果の配列を返します。

`values` → `[TMail::HeaderField]`

  登録されている全てのヘッダオブジェクトの配列を返します。