Я пытаюсь использовать javamail в groovy-скрипте для отправки электронной почты через gmail. Я просмотрел много мест в Интернете и не смог заставить его работать до сих пор. Ошибка я получаю при запуске мой сценарий:Использование Javamail для подключения к Gmail smtp-серверу игнорирует указанный порт и пытается использовать 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?))
Это, как представляется, пытается использовать порт 25, хотя я указал, что он должен использовать порт 587. Кто-нибудь знает, что может быть причиной этой проблемы , Я использовал telnet для подключения к smtp-серверу на порту 587, а thunderbird использует порт 587 с безопасностью STARTTLS и может успешно отправлять почту с использованием SMTP-сервера. Это говорит мне, что это не проблема с заблокированным портом или связью. Вот код, который я использую, чтобы попробовать и отправить электронное письмо:
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)
Любая помощь была бы принята с благодарностью. Заранее спасибо!
-Bryan
Спасибо, что сработали! Обратите внимание, что вторым параметром connect() в int также я должен был переключить номер порта на 465, потому что это порт SSL, а 587 - для TLS. Еще раз спасибо! – Bryan
Рад, что это сработало. Я думаю, что вы можете также удалить свойства mail.smtp.socketFactory. *. – maximdim
Приятно это найти! В Sendgrid есть пример java [здесь] (http://sendgrid.com/docs/Code_Examples/java.html), который использует свойства, и работает отлично, если вы можете использовать порт 25, но если вам нужно переключиться, он не работает. Мой интернет-провайдер блокирует порт 25, поэтому код работал из моего офиса, но не дома, и я не мог понять, почему мой выбранный порт игнорируется. –