Как обрабатывать входящие письма с помощью почтальона и обновлять их в базе данных
Я разрабатываю приложение 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 - хороший выбор. Настройте так:
- Зарегистрируйтесь в Postmark, и вы получите электронное письмо, которое Postmark назначит вашей учетной записи.
- Подпишитесь на Gmail под брендом Служб Google для своего домена. Настройте переадресацию с учетной записи на адрес электронной почты Postmark. Теперь люди могут отправить электронное письмо по адресу reply@yourdamin.com, и оно будет отправлено в Postmark.
- Создайте URL обратного вызова. Когда Postmark получит электронное письмо, оно упакует его и отправит на ваш обратный вызов. Затем вы можете получить доступ к атрибутам электронной почты через хэш params.
Чтобы реализовать ответ на сообщения, просто добавьте поле для ответа в исходящее сообщение, которое содержит уникальный хэш для сообщения, например
reply+uniquehash@yourdomain.com.
Это юридический адрес электронной почты, который будет отправлен по адресу reply@yourdomain.com. Затем вы можете проанализировать хеш в вашем обратном вызове и использовать его для сопоставления ответа с исходным сообщением.
Просто:)