使用Java通过gmail的SMTP服务器发送问题

我的一位客户正在使用商务用Gmail(属于Google

Apps的一部分),我不得不重新配置我开发的网站,以便它与新的凭据匹配。经过TLS错误的努力后,我设法使代码在localhost和测试服务器(均为Apache

Tomcat 5.5)上运行。一切都进行得很顺利,直到我不得不将其移动到他的服务器上(托管公司告诉我的另一个Tomcat

5.5)。在客户端的服务器上,出现以下错误:

javax.mail.SendFailedException: Sending failed;

nested exception is:

class javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;

nested exception is:

java.io.IOException: Couldn't connect using "javax.net.ssl.SSLSocketFactory" socket factory to host, port: smtp.gmail.com, 465; Exception: java.lang.reflect.InvocationTargetException

奇怪的是,在localhost和测试服务器上,端口465可以正常工作,而托管人员则表示该端口已在其服务器上打开。

连接到邮件服务器的代码是:

private void initConfigParams() throws CMSGeneralException {

try {

props = System.getProperties();

String smtpHost = Messages.getDBConfString("mail.smtp.host");

String mailPort = Messages.getDBConfString("mail.smtp.port");

String socketFallback = Messages.getDBConfString("mail.smtp.socketFactory.fallback");

String enableTls = Messages.getDBConfString("mail.smtp.starttls.enable");

String authSmtp = Messages.getDBConfString("mail.smtp.auth");

String tlsRequired = Messages.getDBConfString("mail.smtp.stattls.required");

String sktFactory = Messages.getDBConfString("mail.smtp.socketFactory.class");

props.put("mail.smtp.starttls.enable", enableTls);

props.put("mail.smtp.host", smtpHost);

props.put("mail.smtp.auth", authSmtp);

props.put("mail.smtp.starttls.required", tlsRequired);

props.setProperty("mail.smtp.socketFactory.class", sktFactory);

props.setProperty("mail.smtp.socketFactory.fallback", socketFallback);

props.setProperty("mail.smtp.port", mailPort);

props.setProperty("mail.smtp.socketFactory.port", mailPort);

props.put("mail.transport.protocol", Messages.getDBConfString("mail.transport.protocol"));

Authenticator auth = null;

userName = Messages.getDBConfString("mail.username");

userPassword = Messages.getDBConfString("mail.userpassword");

if (!CMSUtils.isEmptyString(userName) && !CMSUtils.isEmptyString(userPassword)){

/* props.put("mail.smtp.auth", "true"); */

auth = new SMTPAuthenticator(userName, userPassword);

}

session = Session.getDefaultInstance(props, auth);

session.setDebug(false);

address = new InternetAddress[1];

address[0] = new InternetAddress(recipients);

mbText = new MimeBodyPart();

mbText.setContent(text, "text/html");

mp = new MimeMultipart();

mp.addBodyPart(mbText);

} catch (MessagingException e) {

e.printStackTrace();

throw new CMSGeneralException();

}

}

使用以下.properties文件

mail.smtp.starttls.enable=true

mail.smtp.host=smtp.gmail.com

mail.smtp.auth=true

mail.smtp.starttls.required=true

mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

mail.smtp.socketFactory.fallback=false

mail.smtp.port=465

mail.transport.protocol=smtps

mail.username=website@example.com

mail.userpassword=password

mail.from=website@example.com

mail.to=mail@example.com

我尝试了GMail 587的其他端口,但在任何服务器上均不起作用。甚至端口25也无法解决问题。

那么,我在做什么错了,应该怎么做才能使邮件工作?

回答:

摆脱所有套接字工厂属性;如果您使用的是JavaMail的较新版本,则不需要它们。有关如何配置JavaMail以访问Gmail的信息,请参阅JavaMail常见问题解答。如果仍然无法使用,您还将在其中找到调试提示。

另外,将Session.getDefaultInstance更改为Session.getInstance。

最后,如果将“ mail.transport.protocol”设置为“ smtps”,则需要将其他属性设置为“ mail.smtps。 ”属性,而不是“

mail.smtp。 ”属性。

以上是 使用Java通过gmail的SMTP服务器发送问题 的全部内容, 来源链接: utcz.com/qa/421927.html

回到顶部