You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by "Jakob Færch (Trifork)" <jr...@trifork.com> on 2005/12/21 13:41:34 UTC

Problems sending JavaMail mail over SMTP transport

I'm trying to make an application send an email using JavaMail.

The code sending the mail looks like this:
     /**
      * This method creates an email message and sends it using the
      * J2EE mail services
      * @param mailContent contains the message contents to send
      */
     public void createAndSendMail(String emailAddress, String subject, 
String mailContent, Locale locale) throws MailerException {
         try {
             InitialContext ic = new InitialContext();
             Session session = (Session) ic.lookup(JNDINames.MAIL_SESSION);
             Message msg = new MimeMessage(session);
             msg.setFrom();
             msg.setRecipients(Message.RecipientType.TO,
                      InternetAddress.parse(emailAddress, false));
             msg.setSubject(subject);
             String contentType = "text/html";
             StringBuffer sb = new StringBuffer(mailContent);
             msg.setDataHandler(new DataHandler(
                               new ByteArrayDataSource(sb.toString(), 
contentType)));
             msg.setHeader("X-Mailer", "JavaMailer");
             msg.setSentDate(new Date());
             Transport.send(msg);

The ejb-jar for the bean in which the code is executed features this 
snippet:
         <resource-ref>
           <res-ref-name>mail/MailSession</res-ref-name>
           <res-type>javax.mail.Session</res-type>
           <res-auth>Container</res-auth>
           <res-sharing-scope>Shareable</res-sharing-scope>
         </resource-ref>


The geronimo plan has the following to match it:


     <gbean name="mail/MailSession" 
class="org.apache.geronimo.mail.MailGBean" />
     <gbean name="mail/MailSession" 
class="org.apache.geronimo.mail.SMTPTransportGBean">
         <attribute name="host">my.valid.smtphost</attribute>
         <attribute name="port">25</attribute>
     </gbean>

This is the behaviour I can observe using a debugger:
  - A SMTPTransportGBean is instantiated with the correct host parameter
  - The code runs fine, and no exception is thrown from
    the call to Transport.send
  - The Session object looked up in the InitialContext doesn't have
    any properties; I was expection it to have at least a "host"
    property. I don't know a lot about JavaMail, so it might be that
    the session object is fine.
  - I can't find anything in the log which seems related, neither at
    server startup time or at the time the sending code is executed
  - Neither the constructor nor the SendMessage method in
    org.apache.geronimo.javamail.transport.smtp.SMTPTransport is
    called
  - Using localhost for smtp host and a logging tcp proxy, it seems
    that no traffic is generated for the smtp host port 25.

Do I need som additional "wiring" to make smtp sending work? I can see 
that the javamail-transport module has a javamail.default.providers file 
instruction Javamail to use SMTPTransport for smtp. Do I need to do 
anything to facilitate this at runtime?