Bry*_*yan 32 java groovy gmail smtp jakarta-mail
我正在尝试在groovy脚本中使用javamail通过gmail发送电子邮件.我在网上看了很多地方,到目前为止还没能让它运转起来.我在运行脚本时遇到的错误是:
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?))
Run Code Online (Sandbox Code Playgroud)
它似乎尝试使用端口25,即使我已经指定它应该使用端口587.有谁知道可能导致此问题的原因,我已经使用telnet连接到端口587上的smtp服务器,并且thunderbird使用端口587具有STARTTLS安全性,并且能够使用smtp服务器成功发送邮件.这告诉我它不是阻塞端口或连接问题.这是我用来尝试发送电子邮件的代码:
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('email@gmail.com', 'password');
}
}
def d_email = "email@gmail.com",
d_password = "password",
d_host = "smtp.gmail.com",
d_port = "587", //465,587
m_to = "email@gmail.com",
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)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.提前致谢!
布莱恩
max*_*dim 32
在Java中,你会做类似的事情:
Transport transport = session.getTransport("smtps");
transport.connect (smtp_host, smtp_port, smtp_username, smtp_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
Run Code Online (Sandbox Code Playgroud)
注意'smtpS'协议.现代JVM中也不再需要socketFactory属性,但您可能需要为Gmail设置"mail.smtps.auth"和"mail.smtps.starttls.enable"为"true".'mail.smtps.debug'也可能有所帮助.
Bry*_*yan 17
对于任何寻找完整解决方案的人,我根据maximdim的答案使用以下代码:
import javax.mail.*
import javax.mail.internet.*
private class SMTPAuthenticator extends Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication('email@gmail.com', 'test1234');
}
}
def d_email = "email@gmail.com",
d_uname = "email",
d_password = "password",
d_host = "smtp.gmail.com",
d_port = "465", //465,587
m_to = "testepscript@gmail.com",
m_subject = "Testing",
m_text = "Hey, this is the testing email."
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 transport = session.getTransport("smtps");
transport.connect(d_host, 465, d_uname, d_password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
Run Code Online (Sandbox Code Playgroud)
可能对遇到此问题的其他人有用:在属性上设置端口时:
props.put("mail.smtp.port", smtpPort);
Run Code Online (Sandbox Code Playgroud)
..确保使用字符串对象。使用数字(即 Long)对象将导致该语句看似无效。
归档时间: |
|
查看次数: |
113993 次 |
最近记录: |