Hi,

as I'm new to this list, please apologize if this problem came up
before, but I didn't find an easy way to check this against the archive
of this list under http://mail-archives.apache.org/mod_mbox/roller-user/
as there seems to be no search capability.

I had a hard time to set up email notification for Roller 4.0 with
GlassFish 9.1_01. I use the SMTP server by my hosting company, which
requires SMTP authentication.

My first attempt was to configure email via JNDI, with this snipper from
the roller-custom.properties file:

mail.configurationType=jndi
mail.jndi.name=mail/Session

This turned out to be impossible, as Roller assumes that the applicaton
server sets up the javax.mail.Session object in a way that Roller itself
does not have to care about SMTP authentication. As far as I could find
out, it is not possible to set up the JavaMail resource in GlassFish
with the SMTP username and password so it does fulfill that assumption.

Then I switched to the properties-style mail configuration:

mail.configurationType=properties
mail.hostname=<my server>
mail.username=<my SMTP username>
mail.password=<my SMTP password>

In that case I always got a javax.mail.AuthenticationFailedException. I
spotted a potential problem in the Roller source code, but I'm not sure
whether this problem only occurs in connection with GlassFish. Consider
the following source code from
org/apache/roller/weblogger/util/MailUtil.java:

> Transport transport = mailProvider.getTransport();
>         
>         // Try to send while there remain some potentially good addresses
>         try { 
>             do {
>                 // Avoid a loop if we are stuck
>                 nAddresses = remainingAddresses.length;
> 
>                 try {
>                     // Send to the list of remaining addresses, ignoring the 
> addresses attached to the message
>                     transport.send(message, remainingAddresses);
> ...

The call "transport.send(...)" calls the method "public static void
send(Message msg, Address[] addresses)". In the API documentation there
is the following comment for "public static void send(Message msg)"
method that most likely applies to the other static "send" method as
well:

"Note that send is a static method that creates and manages its own
connection. Any connection associated with any Transport instance used
to invoke this method is ignored and not used. This method should only
be invoked using the form Transport.send(msg);, and should never be
invoked using an instance variable."

This means that the username and password from the properties are
ignored, and that is the reason that the AuthenticationFailedException
occurs.

The solution for me is to replace the call
"transport.sendMessage(message, remainingAddresses);" instead of
"transport.send(message, remainingAddresses);". With that change email
notifications work in GlassFish.

Would this qualify as a general bug in Roller, or is this specific to
the combination with GlassFish?

Best Regards
Stephan

Reply via email to