2009-08-26 7 views
0

Selon l'API Rails (extrait ci-dessous), la meilleure façon de recevoir du courrier consiste à créer une seule instance Rails au sein d'un démon qui est invoqué par un MTA à chaque arrivée d'un nouveau courrier.Transmettre des données au démon mailer dans Rails?

Ma question est: comment transmettez-vous des données à ce démon lorsque de nouveaux messages arrivent?

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

Rails API Snippet

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. 

Répondre

0

Dans l'exemple que vous fournissez, il y a aucun démon n'est en cours d'exécution pour traiter le courrier électronique. La documentation dit que vous pouvez configurer votre démon mailer, Postfix dans ce cas, pour invoquer une commande quand le courrier est reçu. Lorsque vous appelez la commande de votre logiciel de messagerie:

RAILS_ROOT/script/runner « Mailman.receive (STDIN.read) »

Le contenu de l'e-mail est transmis dans la méthode de réception. Une meilleure façon de gérer le traitement des e-mails entrants consiste à créer une boîte aux lettres réelle qui reçoit des e-mails. Vous pouvez ensuite écrire un script Ruby qui vérifie la boîte aux lettres pour traiter le courrier électronique. Vous pouvez appeler ce script via cron avec le verrou pour l'assurer qu'il n'y a qu'un processus exécutant cette tâche.

Questions connexes