Problemas con JavaMail Factory

Pepec
02 de Abril del 2008
Hola a todos,

Estoy implementando un envio de correos con JavaMail y estoy intentandolo hacer a través de una Factory para con sólo inicializarla una vez ya pueda trabajar con ella directamente, dentro del proyecto. Mi código és el siguiente:
(El Property Manager me lee unos campos de un fichero .properties, funciona ok)

package net.i2cat.mediacat.util;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;





public class MailFactory {


private static MailFactory instance;
private static Session sesion;

private static Properties props;
private static String smtpHost;
private static String smtpHostPort;
private static String usoPassword;
private static String usuario;
private static String passw;
private static Transport t;

private MailFactory (){
//Recuperar datos del properties y asignarlos a las variables locales

PropertyManager PM= PropertyManager.getInstance();
smtpHost = PM.getSmtpHost();
smtpHostPort = PM.getSmtpHostPort();
usoPassword = PM.getPasswUsage();
usuario = PM.getSmtpUser();
passw = PM.getSmtpPassw();
props = new Properties();

// Nombre del host de correo, es smtp.gmail.com
props.setProperty("mail.smtp.host", smtpHost);

// TLS si está disponible
props.setProperty("mail.smtp.starttls.enable", "true");


// Puerto de gmail para envio de correos
props.setProperty("mail.smtp.port",smtpHostPort);

// Si requiere o no usuario y password para conectarse.
props.setProperty("mail.smtp.auth", usoPassword);

}
public static MailFactory getInstance() {
if (instance==null) {
instance = new MailFactory();

if (sesion==null)
{
sesion = Session.getDefaultInstance(props,null);
sesion.setDebug(true); //instruccion de debug
}

}
return instance;
}



public static void sendMail(String Destinatario, String Titulo, String Texto){

Message mensaje;

try{
// Se crea un mensaje vacío

mensaje = new MimeMessage(sesion);
// A quien va dirigido
mensaje.setFrom(new InternetAddress("[email protected]"));

mensaje.addRecipient(Message.RecipientType.TO, new InternetAddress(Destinatario));

// Asunto
mensaje.setSubject(Titulo);
// Cuerpo del mensaje
mensaje.setText(Texto);


// Se envía el mensaje
t = sesion.getTransport("smtp");

t.connect(smtpHost,usuario,passw);

t.sendMessage(mensaje,mensaje.getAllRecipients());

}
catch (MessagingException e)
{
System.err.println(e.getMessage());
}
}
public void Close()
{
try{
t.close();

}
catch (MessagingException e)
{
System.err.println(e.getMessage());
}
}

}

El problema que tengo es que intento probar este codigo con el siguiente test:
import net.i2cat.mediacat.util.*;



import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class MailTest {

MailFactory MF;

@Before public void SetUp(){
MF=MailFactory.getInstance();
}

@After public void Finish(){
MF.Close();
}


@Test public void SendMail (){

MailFactory.sendMail("[email protected]", "Prova del MailFactory", "A ver que te parece si funzionamos...");
}
}

obtengo el mensaje:
530 5.7.0 Must issue a STARTTLS command first. p38sm1760079fke.13

cuando probando el código en una clase "normal", funciona correctamente. En cierto modo es como si los parametros de configuración no se mandaran al servidor.

¿¿¿Alguna idea???

Muchissimas gracias