Version 1, last updated by dj_necro at January 17, 2010 01:19 UTC

O Apache JAMES

JAMES jest projektem open-source, którego celem jest dostarczenie szybkiego w konfiguracji i uruchomieniu, elastycznego oraz mającego bogate możliwości serwera, który dostarczy funkcjonalności związanych z odbieraniem, wysyłaniem oraz przetwarzaniem poczty elektronicznej.

James server jest zaimplementowany jako kolekcja serwerów i komponentów, które wedle potrzeb poszczególnych użytkowników zebrane razem dają komplentny model platformy email.

Wykorzystana w projekcie 5min Email dystrybucja jest uruchomiona w kontenerze Phoenix.

 

Wykorzystane Serwery JAMES'a

 1.  POP3 - Implementacja serwera POP3 ( Opcjonalna konfiguracja TLS/SSL)

 2. SMTP - Implementacja serwera SMTP (Opcjonalna konfiguracja TLS/SSL) - wykorzystywany w naszym projekcie do przypomnienia hasła lub wiadomości o rejestracji.

 

Przetwarzanie Wiadomości

 JAMES oddziela wyżej wspomniane moduły, odpowiedzialne za przetwarzanie wiadomości od silnika zajmującego się przetwarzaniem oraz przechowywaniem poczty.

Silnik przetwarzania maili nosi nazwę SpoolManager, i jest on kontenerem minimodułów zwanych Mailets i Matchers. To one są rdzeniem SpoolManagera i to one w bezpośredni sposób przetwarzają wiadomości.

Matcher to prosty obiekt, który sprawdza czy wiadomośc mail spełnia określone wymagania. Mailet jest innym typem obiektu, który w zalezny od implementacji sposób przetwarza wybraną wiadomośc.  Dystrybucja Apache JAMES zawiera duża przedefiniowanych funkcjonalności w postaci mailetów, natomiast głównym atutem takiego rozwiązania jest możliwośc tworzenia własnych matcherów i mailetów.

Matchery i mailety używane są w parach, w każdym stadium przetwarzania wiadomośc jest weryfikowana przez wybrany matcher. W sytuacji gdy wiadomości spełni określone przez matcher wymagania zostaje przesłana do mailetu, w przeciwnym wypadku wędruje do dalszego przetwarzania. Weryfikacja maila przez matcher nie spowadza się tylko do odpowiedzi na pytanie "tak" lub "nie". Istnieją zaawansowane możliwości dopasowania kryteriów do określonych adresatów, jednak z punktu widzenia naszego systemu taka funkcjonalnośc nie została wykorzystana. Więcej na ten temat można znaleźc w dokumentacji projektu.

Mailet to moduł przetwarzający wiadomośc. Jego cykl życia przedstawia się następująco:

1. init(MailetConfig config) - tutaj odbywa sie konfiguracja i przekazanie informacji środowiskowych. Metoda wykonywana raz dla pojedynczego kontenera JAMES.

2. service(Mail mail) - Tutaj pojawia się umplementacja kodu do przetworzenia obiektu Mail. W naszym przypadku kwalifikacja wiadomości jako spam lub wiadomośc normalna i zapisanie odpowiednich danych przy wykorzystaniu DAO do bazy). Metoda ta jest wywoływana wielokrotnie podczas cyklu życia, W zależności od natężenia ruchu mailowego może byc wykonywana współbieżnie przez rózne wątki spoolManagera.

3. destroy() - wywoływana pod koniec cyklu życia obiektu

Poziom wyżej od par matcher-mailet znajdują się procesory (processors). Każdy procesor jest listą par matcher/mailet i w trakcie przetwarzania wiadomośc mail jest przekazywana w odpowiedniej kolejności do każdej z tych par, w większości wypadków. W szczególnych przypadkach możliwa jest zmiana stanu wiadomości tak, by została ona bezzwłocznie przekierowana do innego procesora, lub by zaniechano dalszego przetwarzania. W związku z takim zachowaniem procesory SpoolManagera tworzą drzewo przetwarzania. Procesor "root", który musi byc zadeklarowany w pliku konfiguracyjnym, jest korzeniem tego drzewa.

 

Oto przykładowa konfiguracja procesora:

<processor name="root">
 <!-- FIVE MINUTES MAIL Mailet Settings -->
<mailet match="All" class="FiveMinsMailMailet">
<passTrough>
false
</passTrough>
<debug>
true
</debug>
</mailet>
<!-- Important check to avoid looping -->
<mailet match="RelayLimit=30" class="Null"/>
<!-- GHOST EMAILS - NO FURTHER PROCESSING -->
<mailet match="All" class="Null"/>
</processor>

 

Apache JAMES posiada bogatą funkcjonalnośc jeśli chodzi o przechowywanie wiadomości email, począwszy od odpowiedniej struktury plików , a skończywszy na relacyjnych bazach danych. Te mechanizmy nie zostały jednak wykorzystane w naszym projekcie w związku z przyjętym modelem systemu. Więcej na ten temat można znaleźc w dokumentacji JAMES'a.

Na potrzeby aplikacji JAMES został skonfigurowany tak, by korzystac z naszego serwera DNS (tag dnsserver)

Inna konfiguracja, taka jak zarządzanie kontami użytkowników, aliasami i mail forwardingiem jest możliwa za pomocą james remote manager, dostępnego na porcie 4555 serwera, na którym działa JAMES.