J'essaye d'utiliser javamail dans un script groovy pour envoyer un email via gmail. J'ai regardé de nombreux endroits en ligne et j'ai été incapable de le faire fonctionner jusqu'à présent. L'erreur que je reçois lors de l'exécution de mon script est:L'utilisation de Javamail pour se connecter au serveur SMTP de Gmail ignore le port spécifié et essaie d'utiliser 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?))
Il semble essayer d'utiliser le port 25 même si je l'ai spécifié qu'il doit utiliser le port 587. Est-ce que quelqu'un sait ce qui pourrait être la cause de ce problème , J'ai utilisé telnet pour me connecter au serveur smtp sur le port 587, et thunderbird utilise le port 587 avec la sécurité STARTTLS et est capable d'envoyer du courrier avec succès en utilisant le serveur smtp. Cela me dit que ce n'est pas un problème de port ou de connectivité bloqué. Voici le code que j'utilise pour essayer et envoyer l'email:
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)
Toute aide serait grandement appréciée. Merci d'avance!
-Bryan
Merci qui a fonctionné! Notez que le deuxième paramètre à connecter() dans un int, j'ai également dû passer le numéro de port à 465 parce que c'est le port SSL, tandis que 587 est pour TLS. Merci encore! – Bryan
Heureux que cela a fonctionné. Je pense que vous pouvez également supprimer les propriétés mail.smtp.socketFactory. * – maximdim
C'est bien de trouver ça! Sendgrid a un exemple Java [ici] (http://sendgrid.com/docs/Code_Examples/java.html) qui utilise les propriétés, et fonctionne très bien si vous pouvez utiliser le port 25, mais si vous devez basculer, il échoue. Mon FAI bloque le port 25, de sorte que le code fonctionnait à partir de mon bureau, mais pas à la maison, et je ne pouvais pas comprendre pourquoi mon port sélectionné était ignoré. –