Conifgure JBoss mail-service for SMTP over SSL

I always have troubles with sending email-messages from my application which I host locally.
The issue is that my ISP provider SMTP works only via SSL. I was able to setup Outlook to work with it and since ISP use not trusted certificate I was asked to confirm that that certificate is trusted.
So, actually (going ahead) we have two problems

  1. Configure /deploy/mail-service.xml to use correct port and other SSL parameters
  2. Add ISP certificate into the java keystore (since the certificate is not trusted)

So, after couple of experiments and googling I find that following combination of parameters work for me

    <mbean code="org.jboss.mail.MailService" name="jboss:service=Mail">
        <attribute name="JNDIName">java:/Mail</attribute>
        <attribute name="User">${username}</attribute>
        <attribute name="Password">${password}</attribute>

        <attribute name="Configuration">
                <!-- Change to your mail server prototocol -->
                <property name="" value="pop3"></property>
                <property name="mail.transport.protocol" value="smtp"></property>

                <!-- Change to the user who will receive mail  -->
                <property name="mail.user" value="${username}"></property>

                <!-- Change to the mail server  -->
                <property name="" value="${pop3-server}"></property>

                <!-- SSL parameters STARTED-->
                <property name="" value="${smtp-server}"></property>
                <property name="mail.smtp.auth" value="true"></property>
                <!-- The mail server port -->
                <property name="mail.smtp.port" value="465"></property>
                <property name="mail.smtp.ssl.enable" value="true"></property>
                <property name="mail.smtp.socketFactory.class" value=""></property>
                <!-- SSL parameters ENDED -->

                <property name="mail.smtp.connectiontimeout" value="20000"></property>
                <property name="mail.smtp.timeout" value="20000"></property>

                <!-- Change to the address mail will be from  -->
                <property name="mail.from" value="${yourname@yourisp}"></property>

                <!-- Enable debugging to see a lot of inetresting about SMTP protocol -->
                <property name="mail.debug" value="true"></property>

So, that configuration seems at least trying to connect to my SMTP server, but emails are still not sent out. The reason is the SSL-certificate which my ISP used is signed by, which issue free certificates.
To fix this issue I have to install that certificate into my java keystore and the easiest way to do it was to use InstallCert program (the link to source-code)
I run java my-smtp-server:465 input “1” and program generate jssecacerts. After that I updated cacerts file in my %JRE-HOME%/lib/security with generated file (of course I backed up previous cacerts) and that was enough to start using my SSL email.

To find more details or solve more issues you can read the JavaMail FAQ which cover a lot of topics, for example I think it worth to use gmail or yahoo smtp for your email testing purposes, since they are always present and you are not depend on your ISP SMTP


Tagged with: , , , , , ,
Posted in Software Development, Tips and Tricks
4 comments on “Conifgure JBoss mail-service for SMTP over SSL
  1. pokuri says:

    Can you please provide complete example of using mail service in JBOSS. I just want to implement that into my application where I use jBOSS.

    • Andrey Chorniy says:

      Hi, I use it from Seam application and it’s pretty easy (you may find complete instructions here)
      It’s pretty easy with Seam
      1. Configure application (inject JNDI mailService)

      <components xmlns=""
          <mail:mail-session session-jndi-name="java:/Mail"/>

      2. Define message template

      <m:message xmlns=""
          <m:from name="Andrey" address="" />
          <m:to name="#{person.firstname} #{person.lastname}">#{person.address}</m:to>
          <m:subject>Try out Seam!</m:subject>
              <p><h:outputText value="Dear #{person.firstname}" />,</p>

      3. Send from Seam action (java-code)

      private Renderer renderer;
      public void send() {
          try {
             facesMessages.add("Email sent successfully");
         }  catch (Exception e) {
             facesMessages.add("Email sending failed: " + e.getMessage());

      too easy to be true, but it’s true 🙂

      If you don’t use seam – you probably have to use Java-Mail API
      For Spring application you could use Spring Mail API and JNDI bound mail-session

      <bean id="mailSender"
              <property name="session"><ref bean="mailSession"></property>
      <bean id="mailSession"
              <property name="jndiName"><value>java:/Mail</value></property>

      If you don’t have Spring and don’t have Seam than you probably have to retrieve and use your JNDI bound mail-sesison with following java-code (see full example in the jboss-docs

      Context initCtx = new InitialContext();
      Context envCtx = (Context) initCtx.lookup("java:comp/env");
      Session session = (Session) envCtx.lookup("mail/Session");
      Message message = new MimeMessage(session);
      message.setFrom(new InternetAddress(request.getParameter("from"));
      InternetAddress to[] = new InternetAddress[1];
      to[0] = new InternetAddress(request.getParameter("to"));
      message.setRecipients(Message.RecipientType.TO, to);
      message.setContent(request.getParameter("content"), "text/plain");
  2. Warren Socks says:

    While I think this is extremely good information I’m not sure if it is for me

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: