Java 使用 Commons-Email 向 Gmail 发送电子邮件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1783710/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Sending an Email Using Commons-Email to Gmail
提问by user217029
Email email = new SimpleEmail();
String authuser = "[email protected]";
String authpwd = "*******";
// Very Important, Don't use email.setAuthentication()
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
email.setDebug(true); // true if you want to debug
email.setHostName("smtp.gmail.com");
email.getMailSession().getProperties().put("mail.smtp.auth", "true");
email.getMailSession().getProperties().put("mail.debug", "true");
email.getMailSession().getProperties().put("mail.smtp.port", "465");
email.getMailSession().getProperties().put("mail.smtp.socketFactory.port", "465");
email.getMailSession().getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
email.getMailSession().getProperties().put("mail.smtp.socketFactory.fallback", "false");
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true");
email.setFrom("[email protected]", "SenderName");
email.setSubject("TestMail");
email.setMsg("This is a test mail?");
email.addTo("[email protected]", "ToName");
email.send();
and it gives the following exception
它给出了以下异常
SEVERE: org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465
回答by jitter
This does work for me
这对我有用
Email email = new SimpleEmail();
String authuser = "[email protected]";
String authpwd = "xxxx";
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
email.setDebug(true);
email.setHostName("smtp.gmail.com");
email.getMailSession().getProperties().put("mail.smtps.auth", "true");
email.getMailSession().getProperties().put("mail.debug", "true");
email.getMailSession().getProperties().put("mail.smtps.port", "587");
email.getMailSession().getProperties().put("mail.smtps.socketFactory.port", "587");
email.getMailSession().getProperties().put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
email.getMailSession().getProperties().put("mail.smtps.socketFactory.fallback", "false");
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true");
email.setFrom("[email protected]", "SenderName");
email.setSubject("TestMail");
email.setMsg("This is a test mail?");
email.addTo("[email protected]", "ToName");
email.setTLS(true);
email.send();
回答by delfuego
Don't you need to tell Commons Email that you're sending a TLS email:
您是否不需要告诉 Commons Email 您正在发送 TLS 电子邮件:
email.setTLS(true);
prior to your call to email.send()?
在您致电 email.send() 之前?
I'm not sure if this will fix what ails you, since I'm not sure whether you're experiencing a problem connecting to smtp.gmail.com:465 or successfully sending to it (the error message/exception is ambiguous as you've presented it), but it's definitely something that's missing so far as I can tell.
我不确定这是否能解决您的问题,因为我不确定您是否在连接到 smtp.gmail.com:465 或成功发送到它时遇到问题(错误消息/异常与您一样模棱两可已经提出了),但据我所知,这绝对是缺失的东西。
回答by Soundlink
The Commons Email user guide has an example for Gmail using SSL.
Commons Email 用户指南有一个使用 SSL 的 Gmail 示例。
https://commons.apache.org/proper/commons-email/userguide.html
https://commons.apache.org/proper/commons-email/userguide.html
SSL/TLS (Port 465)-> email.setSSLOnConnect(true);
SSL/TLS (端口 465)-> email.setSSLOnConnect(true);
Email email = new SimpleEmail();
email.setHostName("smtp.gmail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("[email protected]");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("[email protected]");
email.send();
STARTTLS (Port 587)-> email.setStartTLSEnabled(true);
STARTTLS(端口 587)-> email.setStartTLSEnabled(true);
Email email = new SimpleEmail();
email.setHostName("smtp.gmail.com");
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setStartTLSEnabled(true);
email.setFrom("[email protected]");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("[email protected]");
email.send();