Tôi đang cố gắng sử dụng javamail trong một tập lệnh groovy để gửi email qua gmail. Tôi đã xem nhiều nơi trực tuyến và không thể làm cho nó hoạt động cho đến nay. Các lỗi tôi nhận được khi chạy kịch bản của tôi là:Sử dụng Javamail để kết nối với máy chủ SMTP smtp bỏ qua cổng được chỉ định và cố gắng sử dụng 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?))
Nó dường như cố gắng sử dụng cổng 25 mặc dù tôi đã xác định rằng nó nên sử dụng cổng 587. Có ai biết những gì có thể gây ra vấn đề này , Tôi đã sử dụng telnet để kết nối với máy chủ smtp trên cổng 587 và thunderbird sử dụng cổng 587 với bảo mật STARTTLS và có thể gửi thư thành công bằng máy chủ smtp. Điều này nói với tôi rằng nó không phải là một cổng bị chặn hoặc vấn đề kết nối. Đây là mã tôi đang sử dụng để thử và gửi 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)
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn trước!
-Bryan
Cảm ơn bạn đã làm việc! Lưu ý rằng tham số thứ hai để kết nối() trong một int, tôi cũng phải chuyển số cổng thành 465 vì đó là cổng SSL, trong khi 587 là cho TLS. Cảm ơn bạn lần nữa! – Bryan
Vui vì nó hoạt động. Tôi nghĩ rằng bạn có thể thả mail.smtp.socketFactory. * Tài sản là tốt. – maximdim
Rất vui được tìm thấy điều này! Sendgrid có một ví dụ java [ở đây] (http://sendgrid.com/docs/Code_Examples/java.html) sử dụng Properties, và hoạt động tốt nếu bạn có thể sử dụng cổng 25, nhưng nếu bạn phải chuyển đổi, nó không thành công. ISP của tôi chặn cổng 25, vì vậy mã đó đang hoạt động từ văn phòng của tôi, nhưng không phải ở nhà và tôi không thể tìm ra lý do tại sao cổng đã chọn của tôi bị bỏ qua. –