2009-08-26 3 views
0

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

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

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

Rails API Отрывок

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. 

ответ

0

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

RAILS_ROOT/скрипт/питателя «Mailman.receive (STDIN.read)»

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

Смежные вопросы