我正在使用Mailman gem 来处理我的 Rails 应用程序的传入电子邮件。我的应用程序在纯文本电子邮件中查找 YAML 文档,然后将其加载到 Ruby 对象中以供应用程序进一步操作。
但是,我希望能够提前计划可能会使用多部分电子邮件进行响应的电子邮件客户端。我需要获取电子邮件的纯文本部分并将其传递给 YAML 解析器。
出于某种原因,它在解析 YAML 时仍然存在问题。我猜是因为这里并没有真正得到纯文本部分。
有没有更好的方法来使用 Mailman 获取电子邮件的文本/纯文本部分?我应该废弃 Mailman 并用 ActionMailer 来代替它吗?
Mailman::Application.run do
default do
begin
message.parts.each do |part|
Mailman.logger.info part.content_type
if part.content_type == 'text/plain; charset=ISO-8859-1' # My poor way of getting the text part
the_yaml = part.body.decoded.scan(/(\-\-\-.*\.\.\.)/m).first.last # Find the YAML doc in the email and assign it to the_yaml
ruby_obj = YAML::load(the_yaml.sub(">", "")) # Remove any >'s automatically added by email clients
if ruby_obj['Jackpots']
ruby_obj['Jackpots'].each do |jackpot|
jp = Jackpot.find(jackpot['jackpot']['id'])
jp.prize = jackpot['jackpot']['prize']
jp.save
end
end
end
end
rescue Exception => e
Mailman.logger.error "Exception occurred while receiving message:\n#{message}"
Mailman.logger.error [e, *e.backtrace].join("\n")
end
end
end