2009-08-16 20 views
9

Ho cercato di capire il modo migliore per gestire le e-mail in entrata in un'applicazione di binari. Mi rendo conto che le "migliori pratiche" sono piuttosto soggettive, quindi inizierò affermando che le mie preoccupazioni principali sono la scalabilità e l'efficienza. Questo è un problema principalmente perché il mio utilizzo riguarderà la gestione di allegati potenzialmente di grandi dimensioni.Best practice per la ricezione di e-mail nei binari

Sembra solo ieri il metodo accettato è stato quello di utilizzare ActionMailer per ricevere l'e-mail, ma di recente ho imbattuti in diversi articoli dicendo che questo è inefficiente in quanto genera una nuova istanza rotaie con ogni email (orribile ad alto volume).

Più di recente, questo articolo è stato sempre la mia attenzione: http://jasonseifer.com/2009/04/24/receving-email-with-rails

I post parla di una versione snellita del sistema ActionMailer che non è costretto a deporre le uova un intero esempio rotaie, ma i commenti parlano diverse altre opzioni come una directory di posta dedicata (maildir?) e il recupero di imap/pop.

La mia domanda è: Qualcuno ha qualche idea su quale sarebbe l'opzione migliore attualmente per l'elaborazione di posta in arrivo in un'applicazione di rotaie (inclusi gli allegati)?

risposta

6

Mantengo il Fetcher plugin per il download di e-mail da un server IMAP che uso con cron. Ero abituato a usare un demone ma era difficile continuare a funzionare (anche con Monit) perché Ruby si bloccava. Cron è OK per il mio carico di lavoro ma genera un processo Rails una volta al minuto.

Per la gestione degli allegati, consultare la libreria MMS2R. Ha una bella interfaccia per ottenere i file da una e-mail.

L'altro approccio che ho consigliato a me è di attivare un post HTTP per ogni messaggio ricevuto. Quindi puoi scalare il tuo livello web per gestirlo.

Plug vergogna: si consiglia di controllare Mike Mondragon e il mio PeepCode book on receiving email with Ruby.

+1

Le spine spudorate non sono spudorate se sono rilevanti ;-), lo controllerò. per quanto riguarda l'opzione IMAP, come funziona esattamente? È necessario avere accesso a un account di posta elettronica esterno altrove, oppure ospitare il proprio server di posta elettronica e semplicemente estrarlo? Grazie! – Ryan

+0

Uso un account email di Google Apps. Tuttavia, qualsiasi account con accesso IMAP dovrebbe funzionare. –

+1

Per il mio caso particolare userò l'http post solo perché la mia situazione non è favorevole all'accesso IMAP (email per un intero dominio). Grazie per la risposta, e grazie per avermi fatto conoscere MMS2R! – Ryan

1

in mms2r il MMS2R#default_media restituisce solo l'allegato video più grande, se esistente, o il più grande allegato di immagine se esiste, o il più grande allegato di testo se esiste, in tale ordine. MMS2R#default_text restituisce il testo più grande/allegato semplice se esiste. Puoi anche accedere a qualsiasi allegato direttamente tramite l'hash multimediale di mms2r, ad es. MMS2R # media. MMS2R#media è rappresentato dal tipo MIME, il valore a cui fa riferimento la chiave è un array di supporti di quel tipo. Quindi, se ci fossero due allegati jpeg in una e-mail elaborata da MMS2R, dovresti accedervi come array digitando l'hash multimediale con image/jpeg, ad es. MMS2R#media['image/jpeg']

Quando MMS2R elabora prima un messaggio di posta elettronica, qualsiasi allegato trovato viene decodificato e memorizzato in un array di supporti di quel tipo. Come ho già detto, quell'array viene quindi digitato dal mimetype nell'hash MMS2R#media.

Comprare il libro, ho bisogno di pagare il mio mutuo PeepCode book on receiving email with Ruby.

4

Si potrebbe provare a utilizzare un servizio come http://cloudmailin.com/

+0

Non ho ancora provato questo, ma lo controllerò la prossima volta che affronterò questo problema. Ho lavorato con sendgrid.com e posso consigliarli a chiunque abbia bisogno di un tale servizio .... volevo solo inserirci per i futuri lettori! – Ryan

0

ho scritto recentemente un demone che riceve la posta da Postfix utilizza LMTP (usa EventMachine ed è abbastanza veloce e robusto) e lo salva in MongoDB. In questo senso elimina il middle man (server IMAP + client IMAP). Questo approccio offre praticamente scalabilità e ridondanza illimitate. Altri supporti per i backend (MySQL, Redis, ecc.) Possono essere aggiunti praticamente in pochissimo tempo.

received

2

Per la stabulazione e-mail da Postfix alla vostra applicazione Rails via HTTP, ho appena scritto un articolo su come lo stiamo facendo.

In realtà è piuttosto semplice, ma sfruttiamo anche la capacità di Postfix di posticipare la posta elettronica se non può essere inoltrata. Non l'ho visto da nessun'altra parte finora. Vedi http://www.doorkeeperhq.com/developer/smtp-to-web-api per i dettagli.