Apache James The complete email application platform Danny Angus What is James? Modular An SMTP Server A POP3 Server An email application server An IMAP server An NNTP Server Mail Storage manager Apache James - The complete email application platform What do you get? SMTP SPOOL STORE HANDLER CHAIN PROCESSOR HELO/EHLO MAILET AUTH MAILET DATA MAILET Repository DB Repository EXPN MAIL PROCESSOR RCPT MAILET HELP MAILET NOOP MAILET DB/File Repository MBOX RSET F QUIT VRFY FETCH IMAP NNTP POP3 Configuration Container Apache James - The complete email application platform Container Distribution Embedding Modular Flexible Options Container Apache James - The complete email application platform Server Ready to use Simple to configure Flexible Scaleable High Uptimes Configuration Container Apache James - The complete email application platform SMTP Handler Chain Command handlers Extend - ESMTP Modify – R&D Fast Fail – Don’t waste time on Spam TLS SMTP AUTH Bind to IP SMTP HANDLER CHAIN Apache James - The complete email application platform HELO/EHLO AUTH DATA EXPN MAIL RCPT HELP NOOP RSET QUIT VRFY Mailet Email applications JavaMail Provided Mailets Remote & local delivery Mailing lists AV/A-Spam Gateway to other transports And Loads More SPOOL PROCESSOR MAILET MAILET MAILET PROCESSOR Apache James - The complete email application platform MAILET MAILET MAILET Persistence Derby – by default File Mbox – for archives Maildir Dbfile Rdbms syntax- STORE SQL Server Oracle Mysql Postgres DB2 …and more… add your favourite. Apache James - The complete email application platform Repository DB Repository DB/File Repository MBOX POP3 Host v Vhost TLS Bind POP3 Apache James - The complete email application platform IMAP At Last we’re getting there Not bullet proof … yet Module TLS Bind IMAP Apache James - The complete email application platform NNTP Independent Great for Workgroups Auth No mail->news NNTP Apache James - The complete email application platform Fetch Mail Blend Your Channels Java Mail IMAP POP3 FETCH Schedule Fetched mail is 1st class citizen Re-route mail from logical accounts to actual users or lists Manage virtual domains Apache James - The complete email application platform What Else We Have Mail related Sub projects (What did you expect?) Apache James - The complete email application platform JSPF 100% Java implementation of SPF Passes the Open SPF Tests (openspf testsuite-2007.01) Apache James - The complete email application platform Mime4j Mime Parser Mime is complex due to its open-ended nature Mime is powerful due to its open-ended nature Multipart Mime is recursive Independent of JavaMail Performance Apache James - The complete email application platform JSieve Sieve is a language that can be used to create filters for electronic mail. PROCESSOR SIEVE MAILET SCRIPT 100% Java Sieve implementation of RFC3028 Can be used to script James-Server. Apache James - The complete email application platform Postage Soak/Stress test mainly for James Provides comprehensive metrics and benchmarks. Compare: Configurations Deployment strategies Hardware/environments Apache James - The complete email application platform How can this all be used? Easily Quickly To great effect At low cost (I would say that wouldn’t I) Apache James - The complete email application platform Stand Alone SMTP SPOOL STORE HANDLER HELO/EHLO CHAIN PROCESS MAILET OR Repository AUTH MAILET DATA MAILET DB DERBY Repository EXPN DB/File MAIL RCPT PROCESS MAILET OR HELP MAILET NOOP FETCH Repository IMAP MBOX MAILET RSET F QUIT VRFY NNTP POP3 Configuration Container Out of the box, set some parameters All you need for straightforward email It Works™ - yes it does! Apache James - The complete email application platform Distributed SMTP STORE HANDLER HELO/EHLO CHAIN Repository DB AUTH DATA EXPN Repository DB/File MAIL RCPT HELP NOOP Repository MBOX RSET QUIT VRFY SMTP STORE HANDLER HELO/EHLO CHAIN Repository DB AUTH SPOOL STORE STORE PROCESS MAILET OR Repository Repository DATA EXPN Repository DB/File Configuration MAIL DB DB Repository Repository MAILET RCPT Container HELP NOOP Repository MBOX DB/File DB/File Repository Repository MBOX MBOX PROCESS MAILET OR RSET Use MX Priorities to manage high availability. MAILET QUIT MAILET VRFY MAILET IMAP POP3 Configuration Configuration Configuration Container Container Container 100% is possible. RDBMS for shared storage Responsibilities can be separated Apache James - The complete email application platform Performant SMTP HANDLER HELO/EHLO CHAIN STORE HANDLER HELO/EHLO CHAIN Repository AUTH Repository EXPN DB MAIL AUTH DB DATA Repository DB/File RCPT DATA EXPN SMTP STORE HELP Repository NOOP Repository MBOX DB/File MAIL RSET RCPT HELP NOOP QUIT Repository VRFY MBOX RSET QUIT VRFY Configuration Configuration Container SPOOL STORE PROCESS MAILET OR Repository DB MAILET MAILET Container Repository DB/File Scale Horizontally Divide and Protect Integrate with your business systems PROCESS MAILET OR MAILET Repository MBOX MAILET SMTP STORE SPOOL STORE STORE STORE HANDLER HELO/EHLO CHAIN Repository PROCESS MAILET OR Repository Repository Repository DB DB DB Repository Repository Repository DB Configuration AUTH DATA EXPN Repository MAILET MAILET DB/File DB/File MAIL RCPT HELP NOOP Repository MBOX Container PROCESS MAILET OR MAILET Repository DB/File DB/File Repository Repository MBOX MBOX MBOX MAILET RSET QUIT VRFY Configuration Container IMAP IMAP POP3 POP3 Configuration Configuration Configuration Container Container Container Throughput depends on message size Administration – James doesn’t provide tooling James Can be made Highly Available J2EE Apache James - The complete email application platform Integrated Integrate Use another container JCA OSGi Spring Geronimo SMTP SPOOL STORE HANDLER CHAIN PROCESSOR HELO/EHLO MAILET AUTH MAILET DATA MAILET Repository DB J2EE Repository EXPN MAIL PROCESSOR RCPT MAILET HELP MAILET NOOP MAILET DB/File Repository MBOX RSET F QUIT VRFY FETCH IMAP NNTP POP3 Configuration Container Apache James - The complete email application platform Extended Add Replace Enhance Remove •Protocols •Storage types •Configuration •Mailets •SMTP commands SMTP SPOOL STORE HANDLER CHAIN PROCESSOR HELO/EHLO MAILET AUTH MAILET DATA MAILET Repository DB Proto-X Repository EXPN MAIL PROCESSOR RCPT MAILET HELP MAILET NOOP MAILET DB/File Repository MBOX RSET X-Filter Repository QUIT VRFY PROCESSOR F X-File FETCH IMAP NNTP VERB-X X-Handler Configuration Container Apache James - The complete email application platform POP3 Embeded Use James modules As much or as little as you want to Extend everything Reuse Mailets sieve scripts SPOOL PROCESSOR MAILET MAILET MAILET X-Filter STORE Repository DB Derby Programme - X Apache James - The complete email application platform Embeded Lower level Use our API’s Independent Modules Just what you need Test bed Be radical! Reuse Be modular! PROCESSOR HANDLER CHAIN HELO/EHLO MAILET AUTH MAILET DATA MAILET EXPN MAIL RCPT HELP NOOP RSET QUIT VRFY Apache James - The complete email application platform What Next? Mailet++ 100% independent 100% useful Annotations JNDI IMAP – the end in sight? Alternative Distributions Make your own! JavaMail re-implement or re-write? Apache James - The complete email application platform Questions? Danny Angus danny@apache.org http://james.apache.org http://blog.killerbees.co.uk Or Google for: Detroit Derby Girls Swim the Atlantic Ocean