How to receive Email in JEE application
- by Hank
Obviously it's not so difficult to send out emails from a JEE application via JavaMail. What I am interested in is the best pattern to receive emails (notification bounces, mostly)? I am not interested in IMAP/POP3-based approaches (polling the inbox) - my application shall react to inbound emails.
One approach I could think of would be
Keep existing MTA (postfix on linux in my case) - ops team already knows how to configure / operate it
For every mail that arrives, spawn a Java app that receives the data and sends it off via JMS. I could do this via an entry in /etc/aliases like myuser: "|/path/to/javahelper" with javahelper calling the Java app, passing STDIN along.
MDB (part of JEE application) receives JMS message, parses it, detects bounce message and acts accordingly.
Another approach could be
Open a listening network socket on port 25 on the JEE application container.
Associate a SessionBean with the socket. Bean is part of JEE application and can parse/detect bounces/handle the messages directly.
Keep existing MTA as inbound relay, do all its security/spam filtering, but forward emails to myuser (that pass the filter) to the JEE application container, port 25.
The first approach I have done before (albeit in a different language/setup).
From a performance and (perceived) cleanliness point of view, I think the second approach is better, but it would require me to provide a proper SMTP transport implementation. Also, I don't know if it's at all possible to connect a network socket with a bean...
What is your recommendation? Do you have details about the second approach?