SlideShare a Scribd company logo
1 of 25
Download to read offline
Apache James: more than
   emails in the cloud
       Ioan Eugen Stan
     Berlin Buzzwords 2012
About myself

● Technology and Free Software Enthousiaste
● Apache James Committer
● Debian contributor and fan
● Fresh CTO for Axemblr - a company focused
  on tools for the cloud
● former Fire Fighter Officer
Project overview and info


Apache James Project - provide a set of (Java)
 libraries related to e-mail communication that
build into an advanced enterprise mail server.


 Use Java (or JVM language) and Mail => try
        Apache James components
Apache James Project

●   Apache James Hupa - rich webmail client
●   Apache James Protocols - lightweight framework for implementing mail
    protocols (IMAP4, POP3, SMTP, etc.)
●   Apache James Mailets - mail processing components
●   Apache James Mime4j - library for parsing MIME documents (including
    email)
●   Apache James Mailbox - flexible mailbox storage
●   Apache James jSPF - implements SPF (Sender policy framework)
●   Apache James jSieve - implements Sieve mail filtering language
●   Apache James jDKIM - implements DKIM
●   Apache James Server - the "One (component) to rule them all"
●   Other: MPT, Postage
Apache James Mailets

Mailet = email processing agent
Mailet = matcher + mailet
Mailets are:
● flexible and powerful
● alternative to Procmail
● James Server = Mailet container
● most of email processing is done in Mailets
● you can access the envelope
Apache James Mailets

There are several groups of Mailets:
● Mailet Base - useful for developing
● Standard Mailets
● Crypto Mailet
● jSieve Mailets

You can chain mailets to form complex logic.
Apache James Mailets

Samle Camel DSL for mailet processing:
● You define 'processors'
● Test for condition and dispatch the mail to
  the right processor:
   <!-- If infected go to virus processor -->
   <mailet match="HasMailAttributeWithValue=org.
apache.james.infected, true" class="ToProcessor">
       <processor>virus</processor>
   </mailet>
(see mailetcontainer-template.conf file)
Apache James Hupa


● A rich webmail app written in GWT
● uses IMAP to access email
● access any IMAP account with Hupa
  (James, GMail, Yahoo)
● Hupa Evolution - GSoC 2012 project to
  improve Hupa
● functional email client
● lacks some common features (address
  book)
● Live Demo http://james.zones.apache.org/
Apache James Hupa




  More screenshots at: http://james.apache.org/hupa/screenshots.html
Apache James jSieve

● implements Sieve mail filtering language
  (RFC 3028), plus extensions
● Sieve = limited programming language to
  filter emails
● used in Sever to safely execute user scripts
● provides:
  ○ jSieve library to use in your JVM platform code
  ○ jSieve Mailet - enables server side filtering
   ○ jSieve utilities - useful, related stuff
Apache James jSPF

● A Java SPF implementation (RFC4408)
● SPF (Sender Policy Framework) is designed
  to detect email spoofing (spam from
  yourself)
● used by Server component
● ready for your code!
Apache James jDKIM

● Used to fight SPAM and phishing
● java DKIM (Domain Keys Identified Mail)
  library - thank you Captain Obvious
● provides verification and signing for email
  messages in your app
● provides Mailets for use in James Server
● pluggable - you can tweel almost every
  behaviour
Apache James Mime4j

● java parsing library for email message
  streams
● supports rfc822 and MIME format
● similar to java-mail but much MORE tolerant
  with illegally formatted messages
● more lightweight than java-mail
● two parsing API's for your convenience:
  ○ event driven using MimeStreamParser (SAX style)
  ○ iterative using MimeTokenStream
Apache James Protocols

● lightweight, generic framework for
  developing mail protocols
● not bound to any socket implementation
● has a fast Netty implementation
● implementation for
    ○   SMTP with hooks for user extension code
    ○   POP3
    ○   IMAP4
    ○   LMTP
●   easy to implement your own line based
    protocol
Apache James Mailbox

● Implements a Email Storage
● Used by James Server to store email
● Can be used by other applications to
  implement Mailbox Pattern
● 1 API, 4 implementations:
  ○ JPA, for database storage (MySQL, Postgres,
    Apache Derby - default)
  ○ Maildir - *NIX systems only
  ○ JCR - Java Content Repository (Apache Jackrabbit)
  ○ Apache HBase backend
● Integration with Lucene (IMAP SEARCH)
Mailbox HBase details

● HBase client - supply an hbase-settings.xml
  config and you are ready to go
● Simple schema:
    ○ JAMES_MAILBOXES
    ○ JAMES_MESSAGES
    ○ JAMES_SUBSCRIPTIONS
●   GSoC 2012 project: Distributed mailbox
    indexing (Lucene HBase integration) to
    provide search for messages stored in
    HBase mailbox
Mailbox HBase schema
Apache James Server

●   The Apache James Project's "Flag Ship"
●   Uses all other James artifacts and more
●   Spring based
●   Available in binary forms:
    ○ WAR
    ○ ZIP standalone app
    ○ Debian *fat* package (in progress)
● works out of the box with Apache Derby as
  mailbox and user/domain store
● unpack, basic config, start sending email (5-
  10 min set-up)
James 3 architecture
How to scale James

Scale storage:
● JPA mailbox with sharding ?!?
● JCR mailbox with clustering ?!?
● use HBase mailbox implementation
Scale processing:
● use GreyMatter - Akka~Mailet integration
● use multiple James instances*
● combine the above approaches

* requires distributed mailbox locking and UID generation - Zookeeper based
implementation progress
Anatomy of Email - RFC 5322

From: John Doe <jdoe@machine.example>
To: Mary Smith <mary@example.net>
Subject: Saying Hello
Date: Fri, 21 Nov 1997 09:55:06 -0600
Message-ID: <1234@local.machine.example>

This is a message just to say hello.
So, "Hello".
Find 5 similarities
Find 5 similarities take 2
Final notes




    Respect the firefighters!
Final slide



              Thank you !
          Questions/Comments?
              Applause !?


      Contact: ieugen@apache.org

More Related Content

What's hot

What's hot (20)

Introduction To RabbitMQ
Introduction To RabbitMQIntroduction To RabbitMQ
Introduction To RabbitMQ
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Node js Introduction
Node js IntroductionNode js Introduction
Node js Introduction
 
The MEAN Stack
The MEAN StackThe MEAN Stack
The MEAN Stack
 
Express JS
Express JSExpress JS
Express JS
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Introduction to NGINX web server
Introduction to NGINX web serverIntroduction to NGINX web server
Introduction to NGINX web server
 
Web workers
Web workersWeb workers
Web workers
 
Présentation html5
Présentation html5Présentation html5
Présentation html5
 
Node.js Basics
Node.js Basics Node.js Basics
Node.js Basics
 
Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.Workshop 4: NodeJS. Express Framework & MongoDB.
Workshop 4: NodeJS. Express Framework & MongoDB.
 
Introduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQIntroduction to AMQP Messaging with RabbitMQ
Introduction to AMQP Messaging with RabbitMQ
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
 
Learning React - I
Learning React - ILearning React - I
Learning React - I
 
CORBA.ppt
CORBA.pptCORBA.ppt
CORBA.ppt
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Web Applications and Deployment
Web Applications and DeploymentWeb Applications and Deployment
Web Applications and Deployment
 
RabbitMQ.ppt
RabbitMQ.pptRabbitMQ.ppt
RabbitMQ.ppt
 
JSON WEB TOKEN
JSON WEB TOKENJSON WEB TOKEN
JSON WEB TOKEN
 
Mongoose and MongoDB 101
Mongoose and MongoDB 101Mongoose and MongoDB 101
Mongoose and MongoDB 101
 

Similar to Apache James: More than emails in the cloud

Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesRoom 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesVietnam Open Infrastructure User Group
 
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021StreamNative
 
How to simplify Email oriented workflow with - Visendo SMTP Extender
How to simplify Email oriented workflow with - Visendo SMTP Extender How to simplify Email oriented workflow with - Visendo SMTP Extender
How to simplify Email oriented workflow with - Visendo SMTP Extender Johannes Cosmin dumitru
 
appengine ja night #25 Google App Engine for PHP (English)
appengine ja night #25 Google App Engine for PHP (English)appengine ja night #25 Google App Engine for PHP (English)
appengine ja night #25 Google App Engine for PHP (English)Ryo Yamasaki
 
Massively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPMassively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPDemin Yin
 
Using MAMP for Web Development
Using MAMP for Web DevelopmentUsing MAMP for Web Development
Using MAMP for Web DevelopmentEric Greene
 
Easy access to open stack object storage
Easy access to open stack object storageEasy access to open stack object storage
Easy access to open stack object storageJuan José Martínez
 
AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09Chris Purrington
 
Scaling customer engagement with apache pulsar
Scaling customer engagement with apache pulsarScaling customer engagement with apache pulsar
Scaling customer engagement with apache pulsarStreamNative
 
Solution for events logging with akka streams and kafka
Solution for events logging with akka streams and kafkaSolution for events logging with akka streams and kafka
Solution for events logging with akka streams and kafkaAnatoly Sementsov
 
Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)Per Henrik Lausten
 
Ranker jms implementation
Ranker jms implementationRanker jms implementation
Ranker jms implementationEosSoftware
 

Similar to Apache James: More than emails in the cloud (20)

Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache JamesRoom 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
Room 1 - 1 - Benoit TELLIER - On premise email inbound service with Apache James
 
stigbot_beta
stigbot_betastigbot_beta
stigbot_beta
 
Apache James/Hupa & GWT
Apache James/Hupa & GWTApache James/Hupa & GWT
Apache James/Hupa & GWT
 
Lecture19
Lecture19Lecture19
Lecture19
 
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
 
How to simplify Email oriented workflow with - Visendo SMTP Extender
How to simplify Email oriented workflow with - Visendo SMTP Extender How to simplify Email oriented workflow with - Visendo SMTP Extender
How to simplify Email oriented workflow with - Visendo SMTP Extender
 
appengine ja night #25 Google App Engine for PHP (English)
appengine ja night #25 Google App Engine for PHP (English)appengine ja night #25 Google App Engine for PHP (English)
appengine ja night #25 Google App Engine for PHP (English)
 
Massively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHPMassively Scaled High Performance Web Services with PHP
Massively Scaled High Performance Web Services with PHP
 
XMPP Academy #1
XMPP Academy #1XMPP Academy #1
XMPP Academy #1
 
pop3-imap.ppt
pop3-imap.pptpop3-imap.ppt
pop3-imap.ppt
 
pop3-imap.ppt
pop3-imap.pptpop3-imap.ppt
pop3-imap.ppt
 
i &lt;3 email
i &lt;3 emaili &lt;3 email
i &lt;3 email
 
Using MAMP for Web Development
Using MAMP for Web DevelopmentUsing MAMP for Web Development
Using MAMP for Web Development
 
Easy access to open stack object storage
Easy access to open stack object storageEasy access to open stack object storage
Easy access to open stack object storage
 
Lotus Domino 8.5
Lotus Domino 8.5Lotus Domino 8.5
Lotus Domino 8.5
 
AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09AWS (Hadoop) Meetup 30.04.09
AWS (Hadoop) Meetup 30.04.09
 
Scaling customer engagement with apache pulsar
Scaling customer engagement with apache pulsarScaling customer engagement with apache pulsar
Scaling customer engagement with apache pulsar
 
Solution for events logging with akka streams and kafka
Solution for events logging with akka streams and kafkaSolution for events logging with akka streams and kafka
Solution for events logging with akka streams and kafka
 
Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)Intro to XPages for Administrators (DanNotes, November 28, 2012)
Intro to XPages for Administrators (DanNotes, November 28, 2012)
 
Ranker jms implementation
Ranker jms implementationRanker jms implementation
Ranker jms implementation
 

More from Ioan Eugen Stan

Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Ioan Eugen Stan
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation toolIoan Eugen Stan
 
Modular Java applications with OSGi on Apache Karaf
Modular Java applications with OSGi on Apache KarafModular Java applications with OSGi on Apache Karaf
Modular Java applications with OSGi on Apache KarafIoan Eugen Stan
 
Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014Ioan Eugen Stan
 
2013 java2 days web apps - a different angle
2013 java2 days web apps - a different angle2013 java2 days web apps - a different angle
2013 java2 days web apps - a different angleIoan Eugen Stan
 
Enterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache CamelEnterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache CamelIoan Eugen Stan
 
Bjug Spring Custom Namespaces by Vlad Untu
Bjug Spring Custom Namespaces by Vlad UntuBjug Spring Custom Namespaces by Vlad Untu
Bjug Spring Custom Namespaces by Vlad UntuIoan Eugen Stan
 
Javascript ui for rest services
Javascript ui for rest servicesJavascript ui for rest services
Javascript ui for rest servicesIoan Eugen Stan
 

More from Ioan Eugen Stan (8)

Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
Modern authentication in Sling with Openid Connect and Keycloak - Adapt.to 20...
 
Gradle build automation tool
Gradle   build automation toolGradle   build automation tool
Gradle build automation tool
 
Modular Java applications with OSGi on Apache Karaf
Modular Java applications with OSGi on Apache KarafModular Java applications with OSGi on Apache Karaf
Modular Java applications with OSGi on Apache Karaf
 
Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014Hands on continouous delivery, I TAKE 2014
Hands on continouous delivery, I TAKE 2014
 
2013 java2 days web apps - a different angle
2013 java2 days web apps - a different angle2013 java2 days web apps - a different angle
2013 java2 days web apps - a different angle
 
Enterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache CamelEnterprise Integration Patterns with Apache Camel
Enterprise Integration Patterns with Apache Camel
 
Bjug Spring Custom Namespaces by Vlad Untu
Bjug Spring Custom Namespaces by Vlad UntuBjug Spring Custom Namespaces by Vlad Untu
Bjug Spring Custom Namespaces by Vlad Untu
 
Javascript ui for rest services
Javascript ui for rest servicesJavascript ui for rest services
Javascript ui for rest services
 

Recently uploaded

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Recently uploaded (20)

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Apache James: More than emails in the cloud

  • 1. Apache James: more than emails in the cloud Ioan Eugen Stan Berlin Buzzwords 2012
  • 2. About myself ● Technology and Free Software Enthousiaste ● Apache James Committer ● Debian contributor and fan ● Fresh CTO for Axemblr - a company focused on tools for the cloud ● former Fire Fighter Officer
  • 3. Project overview and info Apache James Project - provide a set of (Java) libraries related to e-mail communication that build into an advanced enterprise mail server. Use Java (or JVM language) and Mail => try Apache James components
  • 4. Apache James Project ● Apache James Hupa - rich webmail client ● Apache James Protocols - lightweight framework for implementing mail protocols (IMAP4, POP3, SMTP, etc.) ● Apache James Mailets - mail processing components ● Apache James Mime4j - library for parsing MIME documents (including email) ● Apache James Mailbox - flexible mailbox storage ● Apache James jSPF - implements SPF (Sender policy framework) ● Apache James jSieve - implements Sieve mail filtering language ● Apache James jDKIM - implements DKIM ● Apache James Server - the "One (component) to rule them all" ● Other: MPT, Postage
  • 5. Apache James Mailets Mailet = email processing agent Mailet = matcher + mailet Mailets are: ● flexible and powerful ● alternative to Procmail ● James Server = Mailet container ● most of email processing is done in Mailets ● you can access the envelope
  • 6. Apache James Mailets There are several groups of Mailets: ● Mailet Base - useful for developing ● Standard Mailets ● Crypto Mailet ● jSieve Mailets You can chain mailets to form complex logic.
  • 7. Apache James Mailets Samle Camel DSL for mailet processing: ● You define 'processors' ● Test for condition and dispatch the mail to the right processor: <!-- If infected go to virus processor --> <mailet match="HasMailAttributeWithValue=org. apache.james.infected, true" class="ToProcessor"> <processor>virus</processor> </mailet> (see mailetcontainer-template.conf file)
  • 8. Apache James Hupa ● A rich webmail app written in GWT ● uses IMAP to access email ● access any IMAP account with Hupa (James, GMail, Yahoo) ● Hupa Evolution - GSoC 2012 project to improve Hupa ● functional email client ● lacks some common features (address book) ● Live Demo http://james.zones.apache.org/
  • 9. Apache James Hupa More screenshots at: http://james.apache.org/hupa/screenshots.html
  • 10. Apache James jSieve ● implements Sieve mail filtering language (RFC 3028), plus extensions ● Sieve = limited programming language to filter emails ● used in Sever to safely execute user scripts ● provides: ○ jSieve library to use in your JVM platform code ○ jSieve Mailet - enables server side filtering ○ jSieve utilities - useful, related stuff
  • 11. Apache James jSPF ● A Java SPF implementation (RFC4408) ● SPF (Sender Policy Framework) is designed to detect email spoofing (spam from yourself) ● used by Server component ● ready for your code!
  • 12. Apache James jDKIM ● Used to fight SPAM and phishing ● java DKIM (Domain Keys Identified Mail) library - thank you Captain Obvious ● provides verification and signing for email messages in your app ● provides Mailets for use in James Server ● pluggable - you can tweel almost every behaviour
  • 13. Apache James Mime4j ● java parsing library for email message streams ● supports rfc822 and MIME format ● similar to java-mail but much MORE tolerant with illegally formatted messages ● more lightweight than java-mail ● two parsing API's for your convenience: ○ event driven using MimeStreamParser (SAX style) ○ iterative using MimeTokenStream
  • 14. Apache James Protocols ● lightweight, generic framework for developing mail protocols ● not bound to any socket implementation ● has a fast Netty implementation ● implementation for ○ SMTP with hooks for user extension code ○ POP3 ○ IMAP4 ○ LMTP ● easy to implement your own line based protocol
  • 15. Apache James Mailbox ● Implements a Email Storage ● Used by James Server to store email ● Can be used by other applications to implement Mailbox Pattern ● 1 API, 4 implementations: ○ JPA, for database storage (MySQL, Postgres, Apache Derby - default) ○ Maildir - *NIX systems only ○ JCR - Java Content Repository (Apache Jackrabbit) ○ Apache HBase backend ● Integration with Lucene (IMAP SEARCH)
  • 16. Mailbox HBase details ● HBase client - supply an hbase-settings.xml config and you are ready to go ● Simple schema: ○ JAMES_MAILBOXES ○ JAMES_MESSAGES ○ JAMES_SUBSCRIPTIONS ● GSoC 2012 project: Distributed mailbox indexing (Lucene HBase integration) to provide search for messages stored in HBase mailbox
  • 18. Apache James Server ● The Apache James Project's "Flag Ship" ● Uses all other James artifacts and more ● Spring based ● Available in binary forms: ○ WAR ○ ZIP standalone app ○ Debian *fat* package (in progress) ● works out of the box with Apache Derby as mailbox and user/domain store ● unpack, basic config, start sending email (5- 10 min set-up)
  • 20. How to scale James Scale storage: ● JPA mailbox with sharding ?!? ● JCR mailbox with clustering ?!? ● use HBase mailbox implementation Scale processing: ● use GreyMatter - Akka~Mailet integration ● use multiple James instances* ● combine the above approaches * requires distributed mailbox locking and UID generation - Zookeeper based implementation progress
  • 21. Anatomy of Email - RFC 5322 From: John Doe <jdoe@machine.example> To: Mary Smith <mary@example.net> Subject: Saying Hello Date: Fri, 21 Nov 1997 09:55:06 -0600 Message-ID: <1234@local.machine.example> This is a message just to say hello. So, "Hello".
  • 24. Final notes Respect the firefighters!
  • 25. Final slide Thank you ! Questions/Comments? Applause !? Contact: ieugen@apache.org