【问题标题】:Mail service GAE issue - sending mail exception "javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;"邮件服务 GAE 问题 - 发送邮件异常“javax.mail.MessagingException:无法连接到 SMTP 主机:localhost,端口:25;”
【发布时间】:2018-03-30 17:01:48
【问题描述】:

我想从我的 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,端口:25;

但是文档说:

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

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

我从未使用过此服务...我的配额已满。

请帮帮我!

【问题讨论】:

  • 您使用的是GAE提供的JavaMail吗?或者您是否在应用程序中包含 JavaMail jar 文件?
  • 我正在使用我的应用程序中包含的 JavaMail jar。当我删除这个 jar 时,一旦部署了我的应用程序,就会出现“java.lang.NoClassDefFoundError: javax/mail/internet/AddressException”问题。我有“javax.mail.jar”。

标签: java google-app-engine smtp jakarta-mail


【解决方案1】:

今天遇到了同样的问题。刚刚开始工作。 app engine sdk 已经包含了发送电子邮件所需的类:

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

that 和相关的类是调用邮件服务的方式。用那些替换您的消息类,删除对 j​​avax.mail 的所有引用。另一件事,以防你引用这个(就像我一样):

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

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

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

【讨论】:

  • 鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。
【解决方案2】:

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 相关的问题,建议您在那里报告问题,以便我们能够深入研究问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2014-10-23
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多