tomcat org.apache.commons.mail.EmailException:将电子邮件发送到以下服务器失败:smtp.gmail.com:465

wj8zmpe1  于 2022-11-13  发布在  Apache
关注(0)|答案(1)|浏览(140)

我有一个Maven项目,使用JSF 2.2、Tomcat 7,并使用Apache Commons发送电子邮件。
这是我的代码

try {
    // Create the email message
    HtmlEmail email = new HtmlEmail();
    email.setSmtpPort(465); //email.setSslSmtpPort("465");
    email.setSSLOnConnect(true);
    email.setHostName("smtp.gmail.com");
    email.addTo("test@gmail.com", "test");
    email.setFrom(getEmail(), getName());
    email.setSubject(getSubject());
    email.setHtmlMsg("<html>Test</html>"); // set the html message
    email.setTextMsg(getText());// set the alternative message
    email.send();// send the email
} catch (EmailException e) {
    logger.error("Exception sending email: ", e);
} catch (Exception ex) {
    logger.error("Exception sending email: ", ex);
}

当我尝试在Tomcat 7中运行代码时,出现了以下异常:
org.apache.commons.mail.EmailException:将电子邮件发送到以下服务器失败:smtp.gmail.com:465

fruv7luv

fruv7luv1#

这将是因为SMTP中继需要身份验证,您必须以gmail用户/密码登录才能使用中继。
我从来没有使用过commons电子邮件之前,但经过一些谷歌搜索,我发现这个为发送电子邮件通过gmail。

HtmlEmail email = new HtmlEmail();

String authuser = "user";
String authpwd = "pass";

email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));

email.setHostName("smtp.gmail.com");

// properties to configure encryption
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");

相关问题