使用Gmail发送电子邮件时出错

我有以下代码:

Email email = new SimpleEmail(); email.setHostName("smtp.googlemail.com"); email.setSmtpPort(465); email.setAuthenticator(new DefaultAuthenticator("ruth.sistem@gmail.com", "XXXXXX")); email.setSSLOnConnect(true); email.setFrom("ruth.sistem@gmail.com"); email.setSubject("TestMail"); email.setMsg("This is a test mail ... :-)"); email.addTo("ruth.sistem@gmail.com"); email.send(); 

我无法连接到gmail,连接出现错误突发,但是所有连接信息都是正确的,不知道什么阻止了我的代码发送电子邮件的连接,我不能发送简单的电子邮件而且我没有丝毫想法这是什么。

  org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.googlemail.com:465 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410) at org.apache.commons.mail.Email.send(Email.java:1437) at com.observatorioLegislativo.util.EmailTeste.enviaEmailSimples(EmailTeste.java:27) at com.observatorioLegislativo.util.EmailTeste.(EmailTeste.java:13) at com.observatorioLegislativo.bean.Teste.main(Teste.java:41) Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.googlemail.com, port: 465; nested exception is: java.net.ConnectException: Connection timed out: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400) ... 4 more Caused by: java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.security.ssl.SSLSocketImpl.connect(Unknown Source) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:317) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:207) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1938) ... 11 more 

感谢帮助

我相信该片段取自Apache Commons Email API用户指南 。

出于安全原因,GMail会默认Access for less secure appsAccess for less secure apps ,因此这可能会导致您的问题(就像我的那样)。

登录您的GMail帐户并转到以下url:

https://www.google.com/settings/security/lesssecureapps

在此处输入图像描述

设置为Enable

 Email email = new SimpleEmail(); try { email.setHostName("smtp.googlemail.com"); email.setSmtpPort(465); email.setAuthenticator( new DefaultAuthenticator("hogwarts-mailer@gmail.com", "password")); email.setSSLOnConnect(true); // disable in case of EmailException email.setFrom("hogwarts-school@gmail.com", "Hogwarts School"); email.setSubject("Hogwarts Acceptance Letter"); email.setMsg("We are pleased to inform you that you have a place at " + "Hogwarts School of Witchcraft and Wizardry."); email.addTo("harry-potter@hedwig.com"); email.send(); } catch(EmailException ee) { ee.printStackTrace(); } 

免责声明:

通过这样做,您已禁用GMail的安全function之一。 自行承担风险(或使用虚拟电子邮件)。

相关阅读: 通过Apache Commons电子邮件使用GMail SMTP发送电子邮件

尝试smtp.gmail.com和端口587.这些是我使用的设置。 (使用STARTTLS,但用于身份validation的“正常”密码……我相信您的SSLOnConnect就像它一样好)

JavaMail FAQ 提供了调试连接问题的提示 。

很可能是防火墙或防病毒程序阻止您连接。

不需要将其置于尝试中并仅捕获更改gmail中的设置以允许较少的安全应用程序执行。

只是去:

1.我的帐户>>登录和安全>>滚动到页面底部,您将看到“ 允许不太安全的应用程序:关闭 ”部分

2. 只需将其打开即可完成。

Img: 安全访问图像