как обрабатывать входящие письма с помощью почтальона и обновлять их в базе данных - PullRequest
2 голосов
/ 01 февраля 2012

Я разрабатываю приложение 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

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

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

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

недавно произошел эпизод получения писем с почтальоном на железнодорожных передачах: 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
0 голосов
/ 12 июля 2012

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

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

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

reply+uniquehash@yourdomain.com.

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

Простой:)

...