chinese version:
http://www.javaarm.com/faces/display.xhtml?tid=2383
or
https://community.jboss.org/wiki/JBossAS720EmailSession-ChineseVersion
This article introduces how to configure email session in JBoss AS 7.2.0. Here, we use gmail smtp. I summarized many articles and corrected some errors.
1. configure mail session and smtp in standalone.xml
<subsystem xmlns="urn:jboss:domain:mail:1.1"> <mail-session jndi-name="java:/Mail" from="javaarm@gmail.com"> <smtp-server ssl="true" outbound-socket-binding-ref="mail-smtp-gmail"> <login name="javaarm@gmail.com" password="your_password"/> </smtp-server> </mail-session> <mail-session jndi-name="java:/OtherMailSession" from="javaarm@gmail.com"> <smtp-server ssl="true" outbound-socket-binding-ref="mail-smtp-gmail"> <login name="javaarm@gmail.com" password="your_password"/> </smtp-server> </mail-session> </subsystem> <outbound-socket-binding name="mail-smtp-gmail"> <remote-destination host="smtp.gmail.com" port="465"/> </outbound-socket-binding>
2. Java code of getting Mail Session and sending email
2.1 method.1: Resource injection
@Local(IEmailService.class) @Singleton @Startup public class EmailService implements IEmailService{ public static final Logger log = Logger.getLogger(EmailService.class.getName()); public static final String EMAIL_SESSION_JNDI_PATH = "java:/Mail"; @PersistenceContext private EntityManager em; @Resource(name = "java:/Mail") private Session mailSession; @Resource(name = "java:/OtherMailSession") private Session otherSession; @PostConstruct public void start() throws Exception { } @PreDestroy public void destroy(){ } //*****************[interface methods]***************// @Override @PermitAll() public boolean sendMail(Email email){ try{ MimeMessage m = new MimeMessage(getEmailSession()); InternetAddress[] to = new InternetAddress[] { new InternetAddress(email.getToUser().getEmail()), new InternetAddress("javaarm@gmail.com")//备份一份! }; m.setRecipients(Message.RecipientType.TO, to); m.setSubject(email.getTitle()); m.setSentDate(new java.util.Date()); m.setText(email.getContent(), "utf-8", "html"); // Transport.send(m); // return true; }catch(Exception e){ e.printStackTrace(); return false; } } private Session getEmailSession() throws Exception{ return mailSession; } }
2.2 method.2: JNDI look up
change above getEmailSession() method to:
private Session getEmailSession() throws Exception{ InitialContext context = new InitialContext(); return (Session) context.lookup(EMAIL_SESSION_JNDI_PATH); }
Questions: If My application in jboss is critical and I have 3 backing email server, how to use them?
Answer: You can configure multiple mail sessions in mail subsystem and inject/lookup ones you need, or you can use JCA.
Refrences:
https://community.jboss.org/thread/176988
http://middlewaremagic.com/jboss/?p=940
http://www.mastertheboss.com/jboss-configuration/jboss-mail-service-configuration
https://community.jboss.org/thread/231210
jboss-as-7.2.0.Final\docs\schema\jboss-as-mail_1_1.xsd
Comments