données pour passer mailer daemon dans Rails?

voix
0

Selon l'API Rails (snippet ci-dessous), la meilleure façon de recevoir du courrier est en créant une seule instance Rails dans un démon qui obtient invoqué par un MTA dès qu'un nouveau message arrive.

Ma question est: comment voulez-vous passer des données à ce démon quand de nouveaux messages?

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

API Rails 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. 
Créé 27/08/2009 à 00:31
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Dans l'exemple que vous fournissez, il n'y a pas de démon en cours d'exécution pour traiter email. La documentation dit que vous pouvez configurer votre mailer daemon, Postfix dans ce cas, pour invoquer une commande lorsque 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 de courrier entrant est de créer une boîte aux lettres réelle qui reçoit l'email. Vous pouvez alors écrire un script Ruby qui vérifie lot la boîte aux lettres pour traiter l'e-mail. Vous pouvez appeler ce script via Cron avec course de verrouillage autour d'elle pour assurer qu'il n'y a qu'un seul processus d'effectuer cette tâche.

Créé 18/01/2010 à 19:05
source utilisateur

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