Как обрабатывать входящие письма с помощью почтальона и обновлять их в базе данных

Я разрабатываю приложение ruby ​​на rails3, где я отправляю электронное письмо пользователю, и если пользователь отвечает на это электронное письмо, то содержимое этого ответа должно быть обновлено в базе данных. Для этого у меня есть модель ProductComment. когда администратор отправляет комментарий пользователю, он будет сохранен в базе данных. если пользователь отвечает на это, база данных должна быть соответственно обновлена. Я пытаюсь использовать почтальон. Я установил драгоценный камень. Но я не понимаю, как получить идентификатор комментария, что я должен написать в ответ на адрес, где написать код почтальона и с какой почты я должен читать.

Отправляю электронное письмо так:

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

Пожалуйста, помогите мне выйти из этой проблемы

Подскажите пожалуйста как использовать mailman gem в ruby ​​в приложении rails3

2 ответа

Решение

Недавно был про-эпизод получения писем с почтальоном на railscasts: 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

Почтовый штемпель Inbound - хороший выбор. Настройте так:

  1. Зарегистрируйтесь в Postmark, и вы получите электронное письмо, которое Postmark назначит вашей учетной записи.
  2. Подпишитесь на Gmail под брендом Служб Google для своего домена. Настройте переадресацию с учетной записи на адрес электронной почты Postmark. Теперь люди могут отправить электронное письмо по адресу reply@yourdamin.com, и оно будет отправлено в Postmark.
  3. Создайте URL обратного вызова. Когда Postmark получит электронное письмо, оно упакует его и отправит на ваш обратный вызов. Затем вы можете получить доступ к атрибутам электронной почты через хэш params.

Чтобы реализовать ответ на сообщения, просто добавьте поле для ответа в исходящее сообщение, которое содержит уникальный хэш для сообщения, например

reply+uniquehash@yourdomain.com.

Это юридический адрес электронной почты, который будет отправлен по адресу reply@yourdomain.com. Затем вы можете проанализировать хеш в вашем обратном вызове и использовать его для сопоставления ответа с исходным сообщением.

Просто:)

Другие вопросы по тегам