用于发送邮件的ruby中的HTML格式的smtp

时间:2013-04-23 06:17:15

标签: html ruby-on-rails ruby rubygems smtp

我写了一个ruby脚本,通过读取文件内容使用smtp发送邮件。文件的内容是:

+3456|0|2013-04-16|2013-04-19
+3456|0|2013-04-16|2013-05-19

我发送邮件的代码如下:

content = File.read(file_name)   
message = << MESSAGE_END   
From: from@localdomain.com
To: to@localdomain.com
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test
Body
**HTML CODE to display the table with rows equal to the number of records in the file**
MESSAGE_END

Net::SMTP.start('localhost') do |smtp| 
  smtp.send_message message, 'from@localdomain.com','to@localdomain.com'
end

现在我的问题是如何编写一个html代码来创建一个表,其行和列等于文件中的记录数(因为文件中的记录会相应变化)?文件中的记录始终为“|”分离。

2 个答案:

答案 0 :(得分:1)

您可以使用content_tag助手和String#split。例如:

def row_markup(row)
  content_tag(:tr) do
    row.map{ |elem| content_tag(:td, elem) }.reduce(:+)
  end
end

def table_markup(rows)
  content_tag(:table) do
    rows.map{ |row| row_markup(row.split("|")) }.reduce(:+)
  end
end

然后致电

table_markup(read_data_from_file.split("\n"))

答案 1 :(得分:0)

假设您的输入文件位于./input.txt,那么您可以执行以下操作:

require 'builder'

html = Builder::XmlMarkup.new
html.table do
  File.open('./input.txt', 'r').each_line do |line|
   html.tr do
      line.chomp.split('|').each do |column|
        html.td column
      end
    end
  end
end

message << html.to_html