The ability to send email is an important part of many enterprise applications. E-mail can be used to send notifications, alerts, and general information, such as price quotes or contract information. When sending an email from an EJB, you should be able to continue processing without waiting for an email to be sent.

Combining email-sending code with a message-driven bean provides the asynchronous behavior that is ideal for enterprise applications.

This Java tip contains a message-driven bean that sends email using property values passed to it via a JMS message:


public class NotifierBean implements MessageDrivenBean, MessageListener {
    
    private MessageDrivenContext _context;
    
    ...
    
    public void onMessage(Message msg) {
        
        MapMessage map = (MapMessagemsg;
        
        try {
            // simple forward to E-mail:
            sendEmail(map.getProperty("recipient"),
                    map.getProperty("message"));
            
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private void sendEmail(String recipient, String textthrows Exception {
        
        try {
            
            Session session = (Session_context.lookup("AdminSession");
            
            Message message = new MimeMessage(session);
            message.setFrom();
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(recipient, false));
            
            message.setSubject("Notification");
            message.setText(text);
            
            // sends the email message:
            Transport.send(message);
            
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    ...
}