Ruby メール送信 - SMTP

SMTP(Simple Mail Transfer Protocol)は簡易メール転送プロトコルであり、送信元アドレスから宛先アドレスへメールを転送するための一連のルールです。これにより、手紙の中継方法が制御されます。

Rubyはメール送信に Net::SMTP を提供しており、new と start という2つのメソッドを提供しています:

newnew メソッドには2つのパラメータがあります:

  • server nameデフォルトは localhost
  • port numberデフォルトは 25

startstart メソッドには以下のパラメータがあります:

  • server- SMTP サーバー IP、デフォルトは localhost
  • port- ポート番号、デフォルトは 25
  • domain- メール送信者のドメイン名、デフォルトは ENV["HOSTNAME"]
  • account- ユーザー名、デフォルトは nil
  • password- ユーザーパスワード、デフォルトは nil
  • authtype- 認証タイプ、デフォルトはcram_md5

SMTP オブジェクトのインスタンス化メソッドは sendmail を呼び出します。パラメータは以下のとおりです:

  • source- 文字列、配列、または各イテレータが任意の時点で返す任意のもの。
  • sender- 文字列。email のフォームフィールドに表示されます。
  • recipients- 受信者のアドレスを表す文字列または文字列の配列。

実例

以下に、メールを送信するための簡単な Ruby スクリプトを示します:

実例

require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' end
上記の実例では、基本的な電子メールメッセージを設定しました。正しいヘッダー形式に注意してください。電子メールには From、To、Subject が必要で、テキストコンテンツとヘッダー情報の間には空行が必要です。

Net::SMTP を使用してローカルマシン上の SMTP サーバーに接続し、send_message メソッドを使用してメールを送信します。メソッドのパラメータは送信者メールと受信者メールです。

ローカルマシンで SMTP サーバーを実行していない場合は、Net::SMTP を使用してリモート SMTP サーバーと通信できます。ウェブメールサービス(Hotmail や Yahoo! メールなど)を使用する場合、電子メールプロバイダーが送信メールサーバーの詳細情報を提供します:

Net::SMTP.start('mail.your-domain.com')

上記のコードは、ホストが mail.your-domain.com、ポート番号が 25 のメールサーバーに接続します。ユーザー名とパスワードの入力が必要な場合は、コードは次のようになります:

Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)

上記の実例では、指定されたユーザー名とパスワードを使用して、ホストが mail.your-domain.com、ポート番号が 25 のメールサーバーに接続しました。


Ruby を使用して HTML メールを送信する

Net::SMTP は、HTML 形式のメール送信もサポートしています。

電子メールを送信する際に、MIME バージョン、ドキュメントタイプ、文字セットを設定することで、HTML 形式のメールを送信できます。

実例

以下の実例は、HTML 形式のメールを送信するためのものです:

実例

require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> MIME-Version: 1.0 Content-type: text/html Subject: SMTP e-mail test This is an e-mail message to be sent in HTML format <b>This is HTML message.</b> <h1>This is headline.</h1> MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' end

添付ファイル付きメールの送信

混合コンテンツの電子メールを送信する必要がある場合は、Content-type を multipart/mixed に設定する必要があります。これにより、メールに添付ファイルのコンテンツを追加できます。

添付ファイルは転送前に使用する必要がありますpack("m")関数はその内容を base64 形式に変換します。

実例

以下の実例は、/tmp/test.txt を添付したメールを送信します:

実例

require 'net/smtp' filename = "/tmp/test.txt" #ファイルを読み取り、base64 形式にエンコードします filecontent = File.read(filename) encodedcontent = [filecontent].pack("m") # base64 marker = "AUNIQUEMARKER" body =<<EOF This is a test email to send an attachement. EOF #主要なヘッダー情報を定義します part1 =<<EOF From: Private Person <me@fromdomain.net> To: A Test User <test@todmain.com> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=#{marker} --#{marker} EOF # メッセージアクションを定義 part2 =<<EOF Content-Type: text/plain Content-Transfer-Encoding:8bit #{body} --#{marker} EOF #添付ファイル部分を定義します part3 =<<EOF Content-Type: multipart/mixed; name=\"#{filename}\"Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # メールを送信 begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, '[email protected]', ['[email protected]']) end rescue Exception => e print "Exception occured: " + e end

注意:複数の送信先アドレスを指定できますが、カンマで区切る必要があります。

その他の拡張