Estoy tratando de usar javamail en una secuencia de comandos groovy para enviar un correo electrónico a través de gmail. Miré muchos lugares en línea y hasta ahora no he podido hacerlo funcionar. El error que estoy consiguiendo al ejecutar mi script es:Usando Javamail para conectarse al servidor smtp de Gmail ignora el puerto especificado e intenta usar 25
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false
Caught: javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25 (javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?))
Parece estar tratando de usar el puerto 25 a pesar de que he especificado que debe utilizar el puerto 587. ¿Alguien sabe qué podría estar causando este problema , Utilicé telnet para conectarme al servidor smtp en el puerto 587, y thunderbird usa el puerto 587 con seguridad STARTTLS y puede enviar correos con éxito utilizando el servidor smtp. Esto me dice que no es un problema de conectividad o puerto bloqueado. Aquí está el código que estoy usando para tratar de enviar el correo electrónico:
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('[email protected]', 'password');
}
}
def d_email = "[email protected]",
d_password = "password",
d_host = "smtp.gmail.com",
d_port = "587", //465,587
m_to = "[email protected]",
m_subject = "Testing",
m_text = "This is a test."
def props = new Properties()
props.put("mail.smtp.user", d_email)
props.put("mail.smtp.host", d_host)
props.put("mail.smtp.port", d_port)
props.put("mail.smtp.starttls.enable","true")
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.auth", "true")
props.put("mail.smtp.socketFactory.port", d_port)
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
props.put("mail.smtp.socketFactory.fallback", "false")
def auth = new SMTPAuthenticator()
def session = Session.getInstance(props, auth)
session.setDebug(true);
def msg = new MimeMessage(session)
msg.setText(m_text)
msg.setSubject(m_subject)
msg.setFrom(new InternetAddress(d_email))
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to))
Transport.send(msg)
Cualquier ayuda sería muy apreciada. ¡Gracias por adelantado!
-Bryan
¡Gracias que funcionó! Tenga en cuenta que el segundo parámetro para conectar() en un int, también tuve que cambiar el número de puerto a 465 porque es el puerto SSL, mientras que 587 es para TLS. ¡Gracias de nuevo! – Bryan
Me alegro de que funcionó. Creo que también puede eliminar las propiedades de mail.smtp.socketFactory. *. – maximdim
¡Es bueno encontrar esto! Sendgrid tiene un ejemplo de Java [aquí] (http://sendgrid.com/docs/Code_Examples/java.html) que usa Propiedades, y funciona bien si puede usar el puerto 25, pero si tiene que cambiar, falla. Mi ISP bloquea el puerto 25, por lo que el código estaba funcionando desde mi oficina, pero no desde mi hogar, y no pude entender por qué mi puerto seleccionado estaba siendo ignorado. –