Rubyを使用した電子メールの送信-SMTP
Simple Mail Transfer Protocol(SMTP)は、メールサーバー間での電子メールの送信とルーティングを処理するプロトコルです。
Rubyは、SMTP(Simple Mail Transfer Protocol)クライアント側接続用のNet :: SMTPクラスを提供し、newとstartの2つのクラスメソッドを提供します。
ザ・ new 2つのパラメータを取ります-
サーバ名はlocalhostをデフォルト。
デフォルトのポート番号は、既知のポート25です。
ザ・ start メソッドはこれらのパラメータを取ります-
サーバー- SMTPサーバーのIP名、localhostに不履行。
ポート- 25をデフォルトのポート番号、。
ドメインENV [「HOSTNAME」]をデフォルトメール送信者のドメイン、 - 。
アカウント-ユーザー名、デフォルトはnilです。
パスワード-ユーザーのパスワード、nilに不履行。
authType -認証タイプ、をデフォルトCRAM_MD5。
SMTPオブジェクトには、sendmailと呼ばれるインスタンスメソッドがあります。これは通常、メッセージをメールで送信する作業を行うために使用されます。それは3つのパラメータを取ります-
ソース-の文字列又はアレイ又は何か各イテレータは、一度に1つの文字列を返します。
送信者-に表示される文字列からの電子メールのフィールド。
受信者-文字列または受信者の宛先(複数可)を表す文字列の配列。
例
これは、Rubyスクリプトを使用して1つの電子メールを送信する簡単な方法です。一度試してみてください-
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
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サーバーと通信できます。Webメールサービス(HotmailやYahoo! Mailなど)を使用している場合を除き、次のように、電子メールプロバイダーからNet :: SMTPに提供できる送信メールサーバーの詳細が提供されます。
Net::SMTP.start('mail.your-domain.com')
このコード行は、ユーザー名やパスワードを使用せずに、mail.your-domain.comのポート25でSMTPサーバーに接続します。ただし、必要に応じて、ポート番号やその他の詳細を指定できます。例-
Net::SMTP.start('mail.your-domain.com',
25,
'localhost',
'username', 'password' :plain)
この例では、プレーンテキスト形式のユーザー名とパスワードを使用して、mail.your-domain.comのSMTPサーバーに接続します。クライアントのホスト名をlocalhostとして識別します。
Rubyを使用してHTMLメールを送信する
Rubyを使用してテキストメッセージを送信すると、すべてのコンテンツが単純なテキストとして扱われます。テキストメッセージにHTMLタグを含めても、単純なテキストとして表示され、HTMLタグはHTML構文に従ってフォーマットされません。ただし、Ruby Net :: SMTPには、HTMLメッセージを実際のHTMLメッセージとして送信するオプションがあります。
電子メールメッセージの送信中に、HTML電子メールを送信するためのMimeバージョン、コンテンツタイプ、および文字セットを指定できます。
例
以下は、HTMLコンテンツを電子メールとして送信する例です。一度試してみてください-
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
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。次に、テキストと添付ファイルのセクションを内で指定できますboundaries。
境界は2つのハイフンで始まり、その後に一意の番号が続きます。これは、電子メールのメッセージ部分には表示できません。電子メールの最後のセクションを示す最後の境界も、2つのハイフンで終わる必要があります。
添付ファイルは、 pack("m") 送信前にbase64エンコーディングを行う関数。
例
以下は、ファイルを送信する例です。 /tmp/test.txt 添付ファイルとして。
require 'net/smtp'
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
marker = "AUNIQUEMARKER"
body = <<EOF
This is a test email to send an attachement.
EOF
# Define the main headers.
part1 = <<EOF
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = #{marker}
--#{marker}
EOF
# Define the message action
part2 = <<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
#{body}
--#{marker}
EOF
# Define the attachment section
part3 = <<EOF
Content-Type: multipart/mixed; name = \"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = "#{filename}"
#{encodedcontent}
--#{marker}--
EOF
mailtext = part1 + part2 + part3
# Let's put our code in safe area
begin
Net::SMTP.start('localhost') do |smtp|
smtp.sendmail(mailtext, '[email protected]', ['[email protected]'])
end
rescue Exception => e
print "Exception occured: " + e
end
NOTE −配列内で複数の宛先を指定できますが、それらはコンマで区切る必要があります。