Передать данные демону почтовой программы в Rails? - PullRequest
0 голосов
/ 27 августа 2009

Согласно Rails API (фрагмент ниже), оптимальный способ получения почты - создание отдельного экземпляра Rails внутри демона, который вызывается MTA при получении новой почты.

Мой вопрос: как вы передаете данные этому демону при получении новой почты?

========================

Фрагмент API Rails

To receive emails, you need to implement a public instance method called receive that takes a tmail object as its single parameter. The Action Mailer framework has a corresponding class method, which is also called receive, that accepts a raw, unprocessed email as a string, which it then turns into the tmail object and calls the receive instance method.

Example:

  class Mailman < ActionMailer::Base
    def receive(email)
      page = Page.find_by_address(email.to.first)
      page.emails.create(
        :subject => email.subject, :body => email.body
      )

      if email.has_attachments?
        for attachment in email.attachments
          page.attachments.create({
            :file => attachment, :description => email.subject
          })
        end
      end
    end
  end

This Mailman can be the target for Postfix or other MTAs. In Rails, you would use the runner in the trivial case like this:

  ./script/runner 'Mailman.receive(STDIN.read)'

However, invoking Rails in the runner for each mail to be received is very resource intensive. A single instance of Rails should be run within a daemon if it is going to be utilized to process more than just a limited number of email. 

1 Ответ

0 голосов
/ 18 января 2010

В приведенном вами примере не запущен демон для обработки электронной почты. В документации говорится, что вы можете настроить свой почтовый демон, в данном случае Postfix, для вызова команды при получении почты. Когда вы вызываете команду из вашего почтовика:

RAILS_ROOT / script / runner 'Mailman.receive (STDIN.read)'

Содержание письма передается в метод приема. Гораздо лучший способ обработки входящей электронной почты - создать реальный почтовый ящик, который получает электронную почту. Затем вы можете написать Ruby-скрипт, который пакетно проверяет почтовый ящик для обработки электронной почты. Вы можете вызвать этот скрипт через cron с блокировкой, запущенной вокруг него, чтобы убедиться, что только один процесс выполняет эту задачу.

...