class Net::SMTP

aliases: Net::SMTPSession

要約

SMTP のセッションを表現したクラスです。

目次

特異メソッド
インスタンスメソッド
定数

特異メソッド

default_port -> Integer[permalink][rdoc]

SMTPのデフォルトのポート番号(25)を返します。

default_ssl_context -> OpenSSL::SSL::SSLContext[permalink][rdoc]

SSL 通信に使われる SSL のコンテキストのデフォルト値を返します。

default_tls_port -> Integer[permalink][rdoc]
default_ssl_port -> Integer

デフォルトのSMTPSのポート番号(465)を返します。

default_submission_port -> Integer[permalink][rdoc]

デフォルトのサブミッションポート番号(587)を返します。

new(address, port = Net::SMTP.default_port) -> Net::SMTP[permalink][rdoc]

新しい SMTP オブジェクトを生成します。 address はSMTPサーバーのFQDNで、 port は接続するポート番号です。ただし、このメソッドではまだTCPの接続はしません。 Net::SMTP#start で接続します。

オブジェクトの生成と接続を同時にしたい場合には Net::SMTP.start を代わりに使ってください。

[PARAM] address:
接続先のSMTPサーバの文字列
[PARAM] port:
接続ポート番号

[SEE_ALSO] Net::SMTP.start, Net::SMTP#start

start(address, port = Net::SMTP.default_port, helo_domain = 'localhost', account = nil, password = nil, authtype = DEFAULT_AUTH_TYPE) -> Net::SMTP[permalink][rdoc]
start(address, port = Net::SMTP.default_port, helo_domain = 'localhost', account = nil, password = nil, authtype = DEFAULT_AUTH_TYPE) {|smtp| .... } -> object

新しい SMTP オブジェクトを生成し、サーバに接続し、セッションを開始します。

以下と同じです。

require 'net/smtp'
Net::SMTP.new(address, port).start(helo_domain, account, password, authtype)

このメソッドにブロックを与えた場合には、新しく作られた Net::SMTP オブジェクトを引数としてそのブロックを呼び、ブロック終了時に自動的に接続を閉じます。ブロックを与えなかった場合には新しく作られた Net::SMTP オブジェクトが返されます。この場合終了時に Net::SMTP#finish を呼ぶのは利用者の責任となります。

account と password の両方が与えられた場合、 SMTP AUTH コマンドによって認証を行います。 authtype は使用する認証のタイプで、シンボルで :plain, :login, :cram_md5 を指定します。

Example:

require 'net/smtp'

Net::SMTP.start('smtp.example.com') {|smtp|
  smtp.send_message mail_string, 'from@example.jp', 'to@example.jp'
}
[PARAM] address:
接続するサーバをホスト名もしくはIPアドレスで指定します
[PARAM] port:
ポート番号、デフォルトは 25 です
[PARAM] helo_domain:
HELO で名乗るドメイン名です
[PARAM] account:
認証で使うアカウント名
[PARAM] password:
認証で使うパスワード
[PARAM] authtype:
認証の種類(:plain, :login, :cram_md5 のいずれか)
[EXCEPTION] TimeoutError:
接続時にタイムアウトした場合に発生します
[EXCEPTION] Net::SMTPUnsupportedCommand:
TLSをサポートしていないサーバでTLSを使おうとした場合に発生します
[EXCEPTION] Net::SMTPServerBusy:
SMTPエラーコード420,450の場合に発生します
[EXCEPTION] Net::SMTPSyntaxError:
SMTPエラーコード500の場合に発生します
[EXCEPTION] Net::SMTPFatalError:
SMTPエラーコード5xxの場合に発生します

[SEE_ALSO] Net::SMTP#start, Net::SMTP.new

インスタンスメソッド

address -> String[permalink][rdoc]

接続先のアドレスを返します。

auth_cram_md5(user, secret) -> ()[permalink][rdoc]

CRAM-MD5 認証を行います。

このメソッドはセッション開始(Net::SMTP#start)後、メールを送る前に呼びだしてください。

通常は Net::SMTP.startNet::SMTP#start で認証を行うためこれを利用する必要はないはずです。

[PARAM] user:
認証で使うアカウント名
[PARAM] secret:
認証で使うパスワード
auth_login(user, secret) -> ()[permalink][rdoc]

LOGIN 認証を行います。

このメソッドはセッション開始(Net::SMTP#start)後、メールを送る前に呼びだしてください。

通常は Net::SMTP.startNet::SMTP#start で認証を行うためこれを利用する必要はないはずです。

[PARAM] user:
認証で使うアカウント名
[PARAM] secret:
認証で使うパスワード
auth_plain(user, secret) -> ()[permalink][rdoc]

PLAIN 認証を行います。

このメソッドはセッション開始(Net::SMTP#start)後、メールを送る前に呼びだしてください。

通常は Net::SMTP.startNet::SMTP#start で認証を行うためこれを利用する必要はないはずです。

[PARAM] user:
認証で使うアカウント名
[PARAM] secret:
認証で使うパスワード
authenticate(user, secret, authtype) -> ()[permalink][rdoc]

認証を行います。

このメソッドはセッション開始(Net::SMTP#start)後、メールを送る前に呼びだしてください。

通常は Net::SMTP.startNet::SMTP#start で認証を行うためこれを利用する必要はないはずです。

[PARAM] user:
認証で使うアカウント名
[PARAM] secret:
認証で使うパスワード
[PARAM] authtype:
認証の種類(:plain, :login, :cram_md5 のいずれか)

[SEE_ALSO] Net::SMTP.start, Net::SMTP#start, Net::SMTP#auth_plain, Net::SMTP#auth_login, Net::SMTP#auth_cram_md5

capable_auth_types -> [String][permalink][rdoc]

接続したサーバで利用可能な認証を配列で返します。

返り値の配列の要素は、 'PLAIN', 'LOGIN', 'CRAM-MD5' です。

このメソッドは Net::SMTP#start などでセッションを開始した以降にしか正しい値を返しません。

capable_cram_md5_auth? -> bool[permalink][rdoc]

サーバが AUTH CRAM-MD5 を広告してきた場合に真を返します。

このメソッドは Net::SMTP#start などでセッションを開始した以降にしか正しい値を返しません。

capable_login_auth? -> bool[permalink][rdoc]

サーバが AUTH LOGIN を広告してきた場合に真を返します。

このメソッドは Net::SMTP#start などでセッションを開始した以降にしか正しい値を返しません。

capable_plain_auth? -> bool[permalink][rdoc]

サーバが AUTH PLAIN を広告してきた場合に真を返します。

このメソッドは Net::SMTP#start などでセッションを開始した以降にしか正しい値を返しません。

capable_starttls? -> bool[permalink][rdoc]

サーバが STARTTLS を広告してきた場合に真を返します。

このメソッドは Net::SMTP#start などでセッションを開始した以降にしか正しい値を返しません。

data(message) -> Net::SMTP::Response[permalink][rdoc]
data {|f| .... } -> Net::SMTP::Response

DATA コマンドを送ります。

文字列を引数に与えた場合はそれを本文として送ります。ブロックを与えた場合にはそのブロックにストリームオブジェクトが渡されます (Net::SMTP#open_message_stream参考)。

通常は Net::SMTP#send_message, Net::SMTP#open_message_stream で DATA が送られるため利用する必要はないはずです。

[PARAM] message:
メールの本文
set_debug_output(f) -> ()[permalink][rdoc]
debug_output=(f)

デバッグ出力の出力先を指定します。このメソッドは深刻なセキュリティホールの原因となりえます。デバッグ用にのみ利用してください。

[PARAM] f:
デバッグ出力先を IO (もしくは << というメソッドを持つクラス)で指定します
disable_ssl -> ()[permalink][rdoc]
disable_tls -> ()

その Net::SMTP オブジェクトが SMTPS を利用しないよう設定します。

[SEE_ALSO] Net::SMTP#disable_tls, Net::SMTP#tls?

disable_starttls -> ()[permalink][rdoc]

その Net::SMTP オブジェクトがSTARTTLSを常に使わないよう設定します。

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#enable_starttls, Net::SMTP#enable_starttls_auto

ehlo(domain) -> Net::SMTP::Response[permalink][rdoc]

EHLO コマンドを送ります(ESMTP を使います)。

通常は Net::SMTP.start, Net::SMTP#start で EHLO が送られるため利用する必要はないはずです。

[PARAM] domain:
EHLOで送るドメイン名
enable_ssl(context = Net::SMTP.default_ssl_context) -> ()[permalink][rdoc]
enable_tls(context = Net::SMTP.default_ssl_context) -> ()

その Net::SMTP オブジェクトが SMTPS を利用するよう設定します。

このメソッドは Net::SMTP#start を呼ぶ前に呼ぶ必要があります。

[PARAM] context:
SSL接続で利用する OpenSSL::SSL::SSLContext

[SEE_ALSO] Net::SMTP#tls?, Net::SMTP#disable_tls

enable_starttls(context = Net::SMTP.default_ssl_context) -> ()[permalink][rdoc]

その Net::SMTP オブジェクトが 常にSTARTTLSを利用する (利用できない場合には例外を発生する)ように設定します。

[PARAM] context:
SSL接続で利用する OpenSSL::SSL::SSLContext

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#starttls_always?, Net::SMTP#enable_starttls_auto

enable_starttls_auto(context = Net::SMTP.default_ssl_context) -> ()[permalink][rdoc]

その Net::SMTP オブジェクトがSTARTTLSが利用可能な場合 (つまりサーバがSTARTTLSを広告した場合)のみにSTARTTLSを利用するように設定します。

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#starttls_auto?, Net::SMTP#enable_starttls_auto

[PARAM] context:
SSL接続で利用する OpenSSL::SSL::SSLContext

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#starttls_auto?, Net::SMTP#enable_starttls

esmtp? -> bool[permalink][rdoc]
esmtp -> bool

その Net::SMTP オブジェクトが ESMTP を使う場合に真を返します。デフォルトは真です。

[SEE_ALSO] Net::SMTP#esmtp=

esmtp=(bool)[permalink][rdoc]

その Net::SMTP オブジェクトが ESMTP を使うかどうかを指定します。

この指定は Net::SMTP#start を呼ぶ前にする必要があります。 ESMTPモードで Net::SMTP#start を呼び、うまくいかなかった場合には 普通の SMTP モードに切り替えてやりなおします (逆はしません)。

[SEE_ALSO] Net::SMTP#esmtp?

finish -> ()[permalink][rdoc]

SMTP セッションを終了します。

[EXCEPTION] IOError:
セッション開始前にこのメソッドが呼ばれた場合に発生します

[SEE_ALSO] Net::SMTP#start

helo(domain) -> Net::SMTP::Response[permalink][rdoc]

HELO コマンドを送ります(標準的な SMTP を使います)。

通常は Net::SMTP.start, Net::SMTP#start で HELO が送られるため利用する必要はないはずです。

[PARAM] domain:
HELOで送るドメイン名
inspect -> String[permalink][rdoc]

[SEE_ALSO] Object#inspect

mailfrom(from_addr) -> Net::SMTP::Response[permalink][rdoc]

MAILFROM コマンドを送ります。

通常は Net::SMTP#send_message, Net::SMTP#open_message_stream で MAILFROM が送られるため利用する必要はないはずです。

[PARAM] from_addr:
送信元メールアドレス
open_message_stream(from_addr, *to_addrs) {|f| .... } -> ()[permalink][rdoc]
ready(from_addr, *to_addrs) {|f| .... } -> ()

メール書き込みの準備をし、書き込み先のストリームオブジェクトをブロックに渡します。ブロック終了後、書きこんだ結果が送られます。

渡されるストリームオブジェクトは以下のメソッドを持っています。

  • puts(str = '') strを出力して CR LFを出力
  • print(str) strを出力
  • printf(fmt, *args) sprintf(fmt,*args) を出力
  • write(str):: str を出力して書き込んだバイト数を返す
  • <<(str):: str を出力してストリームオブジェクト自身を返す

from_domain は送り主のメールアドレス ('...@...'のかたち) 、 to_addrs には送信先メールアドレスを文字列で渡します。

require 'net/smtp'

Net::SMTP.start('smtp.exmaple.com', 25) {|smtp|
  smtp.open_message_stream('from@example.com', 'to@example.net') {|f|
    f.puts 'From: from@example.com'
    f.puts 'To: to@example.net'
    f.puts 'Subject: test mail'
    f.puts
    f.puts 'This is test mail.'
  }
}

ready は obsolete です。

[PARAM] from_addr:
送信元のメールアドレス
[PARAM] to_addrs:
送信先のメールアドレス(複数可、少なくとも1個)
[EXCEPTION] IOError:
すでにセッションが終了している場合に発生します
[EXCEPTION] TimeoutError:
接続がタイムアウトした場合に発生します
[EXCEPTION] Net::SMTPServerBusy:
SMTPエラーコード420,450の場合に発生します
[EXCEPTION] Net::SMTPSyntaxError:
SMTPエラーコード500の場合に発生します
[EXCEPTION] Net::SMTPFatalError:
SMTPエラーコード5xxの場合に発生します
[EXCEPTION] Net::SMTPAuthenticationError:
送信に必要な認証を行っていなかった場合に発生します
[EXCEPTION] Net::SMTPUnknownError:
SMTPエラーコードがプロトコル上不正な場合に発生します

[SEE_ALSO] Net::SMTP#send_message

open_timeout -> Integer[permalink][rdoc]

接続時に待つ最大秒数を返します。

デフォルトは30(秒)です。この秒数たってもコネクションが開かなければ例外 TimeoutError を発生します。

[SEE_ALSO] Net::SMTP#open_timeout=

open_timeout=(n)[permalink][rdoc]

接続時に待つ最大秒数を設定します。

[SEE_ALSO] Net::SMTP#open_timeout

port -> Integer[permalink][rdoc]

接続先のポート番号を返します。

quit -> Net::SMTP::Response[permalink][rdoc]

QUIT コマンドを送ります。

通常は Net::SMTP#finish で QUIT が送られるため利用する必要はないはずです。

rcptto(to_addr) -> Net::SMTP::Response[permalink][rdoc]

RCPTTO コマンドを送ります。

通常は Net::SMTP#send_message, Net::SMTP#open_message_stream で RCPTTO が送られるため利用する必要はないはずです。

[PARAM] to_addr:
送信先メールアドレス
rcptto_list(to_addrs) { ... } -> object[permalink][rdoc]

RCPTTO コマンドを to_addrs のすべてのメールアドレスに対して送ります。

コマンドを送った後、ブロックを呼び出します。このメソッドの返り値はブロックの返り値になります。

通常は Net::SMTP#send_message, Net::SMTP#open_message_stream で RCPTTO が送られるため利用する必要はないはずです。

[PARAM] to_addrs:
送信先メールアドレスの配列
read_timeout -> Integer[permalink][rdoc]

読みこみ (read(2) 一回) でブロックしてよい最大秒数を返します。

デフォルトは60(秒)です。この秒数たっても読みこめなければ例外 TimeoutError を発生します。

[SEE_ALSO] Net::SMTP#read_timeout=

read_timeout=(n)[permalink][rdoc]

読み込みでブロックしてよい最大秒数を設定します。

[SEE_ALSO] Net::SMTP#read_timeout

rset -> Net::SMTP::Response[permalink][rdoc]

RSET コマンドを送ります。

send_message(mailsrc, from_addr, *to_addrs) -> ()[permalink][rdoc]
send_mail(mailsrc, from_addr, *to_addrs) -> ()
sendmail(mailsrc, from_addr, *to_addrs) -> ()

メールを送信します。

mailsrc をメールとして送信します。 mailsrc は each イテレータを持つオブジェクトならなんでも構いません(たとえば String や File)。

from_domain は送り主のメールアドレス ('...@...'のかたち) 、 to_addrs には送信先メールアドレスを文字列で渡します。

require 'net/smtp'

Net::SMTP.start('smtp.example.com') {|smtp|
  smtp.send_message mail_string,
                    'from@example.com',
                    'to1@example.net', 'to2@example.net'
}

sendmail は obsolete です。

[PARAM] mailsrc:
メールの内容
[PARAM] from_addr:
送信元のメールアドレス
[PARAM] to_addrs:
送信先のメールアドレス(複数可、少なくとも1個)
[EXCEPTION] IOError:
すでにセッションが終了している場合に発生します
[EXCEPTION] TimeoutError:
接続がタイムアウトした場合に発生します
[EXCEPTION] Net::SMTPServerBusy:
SMTPエラーコード420,450の場合に発生します
[EXCEPTION] Net::SMTPSyntaxError:
SMTPエラーコード500の場合に発生します
[EXCEPTION] Net::SMTPFatalError:
SMTPエラーコード5xxの場合に発生します
[EXCEPTION] Net::SMTPUnknownError:
SMTPエラーコードがプロトコル上不正な場合に発生します
tls? -> bool[permalink][rdoc]
ssl? -> bool

その Net::SMTP オブジェクトが SMTPS を利用するならば真を返します。

[SEE_ALSO] Net::SMTP#enable_tls, Net::SMTP#disable_tls, Net::SMTP#start

start(helo_domain = 'localhost', account = nil, password = nil, authtype = DEFAULT_AUTH_TYPE) -> Net::SMTP[permalink][rdoc]
start(helo_domain = 'localhost', account = nil, password = nil, authtype = DEFAULT_AUTH_TYPE) {|smtp| .... } -> object

サーバにコネクションを張り、同時に SMTP セッションを開始します。

もしすでにセッションが開始していたら IOError が発生します。

account と password の両方が与えられた場合、 SMTP AUTH コマンドによって認証を行います。 authtype は使用する認証のタイプで、シンボルで :plain, :login, :cram_md5 を指定します。

このメソッドにブロックを与えた場合には、そのオブジェクトを引数としてそのブロックを呼び、ブロック終了時に自動的に接続を閉じます。ブロックを与えなかった場合には自分自身を返します。この場合終了時に Net::SMTP#finish を呼ぶのは利用者の責任となります。

[PARAM] helo_domain:
HELO で名乗るドメイン名です
[PARAM] account:
認証で使うアカウント名
[PARAM] password:
認証で使うパスワード
[PARAM] authtype:
認証の種類(:plain, :login, :cram_md5 のいずれか)
[EXCEPTION] IOError:
すでにセッションを開始している場合に発生します
[EXCEPTION] TimeoutError:
接続がタイムアウトした場合に発生します
[EXCEPTION] Net::SMTPUnsupportedCommand:
STARTTLSをサポートしていないサーバでSTARTTLSを利用しようとした場合に発生します
[EXCEPTION] Net::SMTPServerBusy:
SMTPエラーコード420,450の場合に発生します
[EXCEPTION] Net::SMTPSyntaxError:
SMTPエラーコード500の場合に発生します
[EXCEPTION] Net::SMTPFatalError:
SMTPエラーコード5xxの場合に発生します
started? -> bool[permalink][rdoc]

SMTP セッションが開始されていたら真を返します。

セッションがまだ開始していない、もしくは終了している場合には偽を返します。

[SEE_ALSO] Net::SMTP#start, Net::SMTP#finish

starttls -> Net::SMTP::Response[permalink][rdoc]

STARTTLS コマンドを送ります。

通常は Net::SMTP#start で STARTTLS が送られるため利用する必要はないはずです。

starttls? -> Symbol/nil[permalink][rdoc]

その Net::SMTP オブジェクトが STARTTLSを利用するかどうかを返します。

常に利用する(利用できないときは Net::SMTP#start で例外 Net::SMTPUnsupportedCommand を発生) するときは :always を、利用可能な場合のみ利用する場合は :auto を、常に利用しない場合には nil を返します。

[SEE_ALSO] Net::SMTP#start

starttls_always? -> bool[permalink][rdoc]

その Net::SMTP オブジェクトが 常にSTARTTLSを利用する (利用できない場合には例外を発生する)ならば真を返します。

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#starttls_auto?, Net::SMTP#enable_starttls

starttls_auto? -> bool[permalink][rdoc]

その Net::SMTP オブジェクトが利用可能な場合にのみにSTARTTLSを利用するならば真を返します。

[SEE_ALSO] Net::SMTP#starttls?, Net::SMTP#starttls_always?, Net::SMTP#enable_starttls_auto

定数

DEFAULT_AUTH_TYPE -> Symbol[permalink][rdoc]

デフォルトの認証スキーム(:plain)です。

Revision -> String[permalink][rdoc]

ファイルのリビジョンです。使わないでください。