邮件服务GAE问题 - 发送邮件异常" javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:25;"

时间:2018-03-30 17:01:48

标签: java google-app-engine smtp javamail

我想从我的GAE项目发送邮件。我已经按照文档示例...

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);

    try {
      Message msg = new MimeMessage(session);
      msg.setFrom(new InternetAddress("xxx@xxxx.appspotmail.com", "Example.com Admin"));
      msg.addRecipient(Message.RecipientType.TO,
                       new InternetAddress("xxxxx@gmail.com", "Mr. User"));
      msg.setSubject("Your Example.com account has been activated");
      msg.setText("This is a test");
      Transport.send(msg);
    } catch (AddressException e) {
      e.printStackTrace();
    } catch (MessagingException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

部署后,我收到此异常消息

  

javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:25;

但是文档说:

  

创建JavaMail会话时,如果您不提供任何SMTP服务器配置,App Engine将使用Mail服务发送消息

但似乎尝试连接到SMTP服务器......显然,localhost上没有SMTP服务器......

我从未使用过此服务...我的配额已全部可用。

请帮帮我!

2 个答案:

答案 0 :(得分:0)

今天遇到了同样的问题。只是让它工作。 app engine sdk已经包含了发送电子邮件所需的课程:

https://cloud.google.com/appengine/docs/standard/java/javadoc/com/google/appengine/api/mail/MailService.Message

它和相关的类是调用邮件服务的方式。用这些替换你的消息类,删除对javax.mail的所有引用。另外一件事,如果你引用这个(就像我一样):

https://cloud.google.com/appengine/docs/standard/java/mail/sending-mail-with-mail-api

我无法让它工作,看起来不会没有smtp主机至少。谷歌很高兴为其示例代码库中的非工作示例提供无意义的文档

另外,如果您按照“谁可以发送邮件”链接,它会告诉您任何形式的任何地址@ [APP_NAME] .appspotmail.com或任何@ [APP_ALIAS] .appspotmail.com都应该有效。使用我的应用程序名称导致“未经授权的发件人”,但使用仪表板中的应用程序ID工作。什么本来应该是一个十分钟的解决方案变成了几个小时的苦差事,但我有一个工作的电子邮件。谢谢,谷歌。

答案 1 :(得分:0)

Mail service API支持App Engine SDK附带的JavaMail(javax.mail)接口。使用任何其他罐子可能会产生问题。您可以按照Java 7Java 8中的代码示例进行操作,演示如何发送邮件。

我应该注意,由于垃圾邮件问题,不允许端口25,465和587上的出站连接,因此邮件的发件人地址必须是this link中选项之一。

您可以通过信息中心获取application ID/name(与项目ID /名称相同)。

请注意,Issue Tracker保留用于报告错误和功能请求。如果您遇到与APP_NAME或APP_ALIAS相关的任何问题,建议您在此处报告问题,以便我们能够深入研究问题。