2009-08-16 12 views
9

Próbuję znaleźć najlepszy sposób obsługi poczty przychodzącej w aplikacjach szyn. Zdaję sobie sprawę, że "najlepsze praktyki" są dość subiektywne, więc zacznę od stwierdzenia, że ​​moje główne problemy to skalowalność i wydajność. Jest to problem przede wszystkim dlatego, że moje użycie będzie wymagać obsługi potencjalnie dużych załączników.Najlepsze metody odbierania wiadomości e-mail w szynach

Wydaje się jakby wczoraj przyjętą metodą było używać ActionMailer aby otrzymać e-maila, ale ostatnio mam natknął kilku artykułach mówiąc to jest nieefektywne, ponieważ ikra nową instancję szyn z każdego maila (okropnym w dużych ilościach).

Ostatnio ten artykuł jest coraz moją uwagę: http://jasonseifer.com/2009/04/24/receving-email-with-rails

Poczty mówi o odchudzić wersji systemu ActionMailer że nie jest zmuszony do tarła całą instancję szynach, ale mówić o komentarze kilka innych opcji, takich jak dedykowany katalog mail (maildir?) i pobieranie IMAP/POP.

Moje pytanie brzmi: Czy ktoś ma jakiekolwiek przemyślenia na temat tego, jaka jest obecnie najlepsza opcja przetwarzania poczty przychodzącej w aplikacji szyny (w tym załączników)?

Odpowiedz

6

Utrzymuję numer Fetcher plugin dla wiadomości e-mail do pobrania z serwera IMAP, którego używam z cronem. Używałem demona, ale było to trudne do kontynuowania (nawet z monitowaniem), ponieważ Ruby zawiesiłaby się. Cron jest w porządku dla mojego obciążenia, ale odradza proces Railsowy raz na minutę.

Aby przetworzyć załączniki, sprawdź bibliotekę MMS2R. Ma ładny interfejs do pobierania plików z wiadomości e-mail.

Innym rozwiązaniem, które poleciłem, jest odpalenie posta HTTP dla każdej odebranej wiadomości. Następnie możesz przeskalować warstwę sieci, aby go obsłużyć.

Bezwstydna wtyczka: możesz sprawdzić Mike Mondragon i mój PeepCode book on receiving email with Ruby.

+1

Bezwstydne wtyczki nie są bezwstydne, jeśli są odpowiednie ;-), sprawdzę to. w odniesieniu do opcji IMAP, jak to działa dokładnie? Czy musisz mieć dostęp do zewnętrznego konta e-mail w innym miejscu lub hostować swój własny serwer e-mail i po prostu wyciągnąć z tego? Dzięki! – Ryan

+0

Używam konta e-mail Google Apps. Jednak każde konto z dostępem IMAP powinno działać. –

+1

W moim konkretnym przypadku użyję http post tylko dlatego, że moja sytuacja nie sprzyja dostępowi do IMAP (e-mail dla całej domeny). Dziękuję za odpowiedź i dziękuję za przeniesienie mnie na MMS2R! – Ryan

1

w mms2r MMS2R#default_media po prostu zwraca największy załącznik wideo, jeśli istnieje, lub największy załącznik obrazu, jeśli istnieje, lub największy załącznik tekstowy, jeśli istnieje, w tej kolejności. MMS2R#default_text zwraca największy załącznik tekstowy/zwykły, jeśli istnieje. Dostęp do każdego z załączników można uzyskać bezpośrednio za pośrednictwem skrótu do mediów, np. Mms2r. Nośnik MMS2R #. MMS2R#media jest kluczowany przez typ MIME, wartość określona przez klucz jest tablicą mediów tego typu. Jeśli więc w e-mailu przetworzonym przez MMS2R były dwa załączniki jpeg, dostęp do nich byłby możliwy poprzez wpisanie skrótu dla nośnika z obrazem/jpeg, np. MMS2R#media['image/jpeg']

Gdy MMS2R po raz pierwszy przetwarza wiadomość e-mail, znaleziony załącznik jest dekodowany i zapisywany w tablicy tego typu nośnika. Jak już wspomniałem, tablica jest następnie wpisywana przez typ MIME w mieszaniu MMS2R#media.

Kup książkę, muszę zapłacić kredyt hipoteczny PeepCode book on receiving email with Ruby.

4

można spróbować skorzystać z usługi jak http://cloudmailin.com/

+0

Nie próbowałem jeszcze tego, ale sprawdzę to następnym razem, gdy napotkam ten problem. Pracowałem z sendgrid.com i mogę polecić je każdemu, kto potrzebuje takiej usługi .... po prostu chciałbym zagrać dla przyszłych czytelników! – Ryan

0

Niedawno napisałem demona, który odbiera pocztę z Postfix przy użyciu LMTP (używa EventMachine i jest bardzo szybkie i wytrzymałe) i zapisuje go do MongoDB. W tym sensie eliminuje pośrednika (serwer IMAP + klient IMAP). Takie podejście daje prawie nieograniczoną skalowalność i nadmiarowość. Inne wsparcie dla backendów (MySQL, Redis itp.) Można dodawać praktycznie w żadnym momencie.

received

2

do przekazywania wiadomości e-mail z Postfix do aplikacji Rails przez HTTP, po prostu napisał artykuł o tym, jak mamy to robić.

To całkiem proste, ale jesteśmy również wykorzystując zdolność Postfix do odroczenia e-mail, jeżeli nie mogą być przekazywane. Nie widziałem tego gdzie indziej tak daleko. Aby uzyskać szczegółowe informacje, patrz http://www.doorkeeperhq.com/developer/smtp-to-web-api.

Powiązane problemy