Latest web development tutorials

メールを送信ルビー - SMTP

SMTP(簡易メール転送プロトコル)は、それが通過する文字方法を制御する必要があるソースから宛先にメッセージを送信するためのルールのセットである簡易メール転送プロトコル、です。

Rubyはネット:: SMTPがメールを送信することを提供し、二つの方法や新たなスタートを提供します。

新しい方法は2つのパラメータがあります。

  • デフォルトサーバ名はlocalhostです
  • デフォルトポート番号は25です

startメソッドは、次のパラメータがあります。

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

SMTPオブジェクトのインスタンス化の方法では、sendmail、次のパラメータを呼び出します。

  • ソース-リターンの任意の時点での各反復か何かの文字列または配列。
  • 送信者-電子メールフィールドの形で表示される文字列。
  • 受信者-受信者のアドレスを表す文字列または文字列の配列。

以下は、メールを送信するための簡単なRubyスクリプトが用意されています。

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

上記の例では、正しいタイトルフォーマットに注意を払う、基本的な電子メールメッセージを設定しています。 テキストとヘッダ情報との間に、からのものであると、電子メール、および件名は、空白行が必要です。

受信者のメールとメッセージの送信者のためのSEND_MESSAGEプロセスを使用して、メッセージ、プロセスパラメータを送信するために、ローカルマシン上のSMTPサーバーに接続するためにはNet :: SMTPを使用してください。

あなたがマシンのSMTPサーバー上で実行されていない場合は、リモートの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に接続するためのユーザー名とパスワードを使用します。


ルビーでHTMLメールを送信

ネット:: SMTPはまた、HTML形式でメッセージを送信するためのサポートを提供します。

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

以下の実施例は、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のある設定する必要があります。 だから、メッセージの内容に添付ファイルを追加することができます。

転送前のアクセサリは、使用パック(「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 <[email protected]>
To: A Test User <[email protected]>
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  

注:複数の送信のアドレスを指定し、カンマの使用を必要とすることができます。