Rails アプリの受信メールを処理するためにMailman gem を使用しています。私のアプリケーションは、平文の電子メールで YAML ドキュメントを探し、それを Ruby オブジェクトにロードして、アプリでさらに操作できるようにします。
ただし、マルチパート メールで応答する可能性のあるメール クライアントについては、前もって計画できるようにしたいと考えています。メールのプレーンテキスト部分を取得して、YAML パーサーに渡す必要があります。
何らかの理由で、YAML の解析にまだ問題があります。ここではプレーンテキスト部分を実際に取得していないためだと思います。
Mailman でメールの text/plain 部分を取得するより良い方法はありますか? 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