Ruby SMTP メール
Rubyでメールを送信する
- 単にメールを送る
require 'net/smtp' #SMTP.start でセッションを開く #第一引数がサーバのアドレスで第二引数がポート番号 #ブロックを使うとセッションの終了を自動的にやってくれる。 Net::SMTP.start( 'your.smtp.server', 25 ) {|smtp| #send_mail(テンプレート, 送信元, 送信先) #テンプレートをメールとして送信します。eachイテレータを持つオブジェクトならなんでもよい(StringやFileなど)。 smtp.send_mail <<EndOfMail, 'your@mail.address', 'to@some.domain' From: Your Name <your@mail.address> To: Dest Address <to@some.domain> Subject: test mail Date: Sat, 23 Jun 2001 16:26:43 +0900 Message-Id: <unique.message.id.string@some.domain> This is test mail. EndOfMail }
- 日本語でメールを送る
require 'net/smtp' #日本語化のライブラリ? require "nkf" def sendmail(to, from, subject, body) body = <<EOT From: #{from} #宛先は改行して表示 To: #{to.to_a.join(",\n ")} #-Mオプション:自動で折り返し。 #-m0オプション:MIMEデコードをしない。 #-Wオプション:(W:UTF-8 / E:EUC-JP / S:SJIS) Subject: #{NKF.nkf("-WMm0", subject)} Date: #{Time::now.strftime("%a, %d %b %Y %X")} #最低限3つのMIMEヘッダをつける。 #Mime-Version,Content-Type,Content-Transfer-Encoding Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit #{NKF.nkf("-Wjm0", body)} EOT Net::SMTP.start( 'mail-smtp.sample.co.jp', 25 ) {|smtp| smtp.send_mail body, from, to } end sendmail("s@mple.co.jp", "s@mple.co.jp", "日本語", "テストメール")
-
- 参考:NKFライブラリ
http://www.ruby-lang.org/ja/man/html/nkf.html#a.a5.aa.a5.d7.a5.b7.a5.e7.a5.f3.ca.b8.bb.fa.ce.f3
- 完成形
require 'net/smtp' require "nkf" def sendmail(to, from, subject) #-Mオプション:自動で折り返し。 #-m0オプション:MIMEデコードをしない。 #-Wオプション:(W:UTF-8 / E:EUC-JP / S:SJIS) #疑問:件名と本文で文字コードが異なる。(件名はSJIS,本文UTF-8) body = <<EOT From: #{from} To: #{to.to_a[1].join(",\n ")} Cc: #{to.to_a[0].join(",\n ")} Bcc: #{to.to_a[2].join(",\n ")} Subject: #{NKF.nkf("-SMm0", subject)} Date: #{Time::now.strftime("%a, %d %b %Y %X")} Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit EOT #ファイルをテンプレートとして読み込み File.open( 'template.txt' ) {|f| f.each{|line| body += NKF.nkf("-Wjm0", line)} } Net::SMTP.start( 'mail-smtp.sample.co.jp', 25 ) {|smtp| smtp.send_mail body, from, to } end to = ["s@mple.co.jp","admin@example.com","ex@mple.co.jp"] sendmail(to, "s@mple.co.jp", "○○の件")