Passar dados para mailer daemon em Rails?

votos
0

De acordo com a API Rails (trecho abaixo), a melhor maneira de receber e-mail é através da criação de uma única instância Rails dentro de um daemon que é invocado por um MTA sempre que chega uma nova mensagem.

A minha pergunta é: como você passar dados para que daemon quando uma nova mensagem chega?

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

Rails API de trechos

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. 
Publicado 27/08/2009 em 00:31
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

No exemplo que você fornecer, não há daemon rodando para processar e-mail. A documentação está dizendo que você pode configurar o seu daemon de mensagens, Postfix, neste caso, para invocar um comando quando o correio é recebido. Quando você chamar o comando de seu mailer:

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

O conteúdo do e-mail é passado para o método receber. Uma maneira muito melhor para lidar com o processamento de e-mails recebidos é criar uma caixa de correio real que recebe e-mail. Você pode, em seguida, escrever um script Ruby que lote verifica a caixa de correio para processar o e-mail. Você pode chamar esse script via cron com bloqueio de corrida em torno dele para garantir que não é apenas um processo de realizar essa tarefa.

Respondeu 18/01/2010 em 19:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more