如何使用mailman处理传入的邮件并将其更新到数据库中

时间:2012-02-01 11:17:28

标签: ruby-on-rails-3 email incoming-mail mailman-gem

我正在rails3应用程序上开发ruby,我正在向用户发送电子邮件,如果用户回复该电子邮件然后回复内容,则应将日期更新到数据库。为此,我有ProductComment模型。当admin向用户发送评论时,它将存储在数据库中。如果用户回复,则应相应地更新数据库。我正在尝试使用mailman。我已经安装了宝石。但是我没有得到如何获得评论ID,我应该在回复地址写什么,在哪里写邮件员代码以及我应该阅读哪些邮件。

我发送的电子邮件是这样的:

mail(:to => @user.email, :subject => "Edit Your Product", :reply_to=>"abc@syz.com)

我正在这样的产品控制器中处理它:

require 'mailman'
Mailman::Application.run do
to 'abc@xyz.com' do
ProductComment.create(message)
end
end

请帮助我解决这个问题

请告诉我如何在rails3应用程序中使用ruby中的mailman gem

2 个答案:

答案 0 :(得分:5)

最近有关于在电子报播中收到邮件的电子邮件:http://railscasts.com/episodes/313-receiving-email-with-mailman

chmod +x script/mailman_server
cat mailman_test.eml | script/mailman_server
script/mailman_server

-

# script/mailman_server
#!/usr/bin/env ruby
require "rubygems"
require "bundler/setup"
require "mailman"

Mailman.config.logger = Logger.new("log/mailman.log")

Mailman.config.pop3 = {
  server: 'pop.gmail.com', port: 995, ssl: true,
  username: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"]
}

Mailman::Application.run do
  default do
    begin
      Ticket.receive_mail(message)
    rescue Exception => e
      Mailman.logger.error "Exception occurred while receiving message:\n#{message}"
      Mailman.logger.error [e, *e.backtrace].join("\n")
    end
  end
end

-

def self.receive_mail(message)
  ticket_id = message.subject[/^Update (\d+)$/, 1]
  if ticket_id.present? && Ticket.exists?(ticket_id)
    Ticket.update(ticket_id, body: message.body.decoded)
  else
    Ticket.create subject: message.subject, body: message.body.decoded, from: message.from.first
  end
end

答案 1 :(得分:0)

邮戳入境是一个不错的选择。设置如下:

  1. 注册邮戳,他们会向您发送一封邮件,邮戳将分配给您的帐户。
  2. 为您的域名注册Google Apps品牌的Gmail。设置从帐户转发到邮戳地址。人们现在可以发送电子邮件至reply@yourdamin.com,它将被转发到邮戳。
  3. 创建回调网址。当Postmark收到一封电子邮件时,它会打包并将其发布到您的回调中。然后,您可以通过params hash访问电子邮件属性。
  4. 要实现对邮件的回复,只需在您的外发邮件中添加一个回复字段,其中包含邮件的唯一哈希值,例如

    reply+uniquehash@yourdomain.com.
    

    这是一个合法的电子邮件地址,将发送至reply@yourdomain.com。然后,您可以解析回调中的哈希值,并使用它来回复原始邮件的回复。

    简单:)