【问题标题】:GAE with IAP (Identity Aware Proxy) and mail inboundservice带有 IAP(身份感知代理)和邮件入站服务的 GAE
【发布时间】:2017-07-07 15:08:35
【问题描述】:

我有一个 Java appengine 标准项目,它通过激活的入站服务处理传入的邮件,没有任何问题。

如果我配置并激活 IAP(身份感知代理),appengine 项目仍然可以正常工作,没有任何问题。

但是现在接收邮件服务会拒绝所有传入的邮件。

Message not delivered

There was a problem delivering your message to
<recipient>@<projectid>.appspotmail.com. See the technical details
below. 

Final-Recipient: rfc822; [user]@[projectid].appspotmail.com 
Action: failed
Status: 5.0.0 
Last-Attempt-Date: Thu, 06 Jul 2017 07:46:33 -0700 (PDT)

我忘记了什么?感谢您的任何提示!

----------------------------------------------

appengine-web.xml

<inbound-services>
        <service>mail</service>
</inbound-services>

web.xml

<servlet>
        <servlet-name>MailhandlerServlet</servlet-name>
        <servlet-class>com.company.appengine.gae.mail.MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>MailhandlerServlet</servlet-name>
        <!-- /_ah/mail/* matches all email addressed to the app -->
        <url-pattern>/_ah/mail/*</url-pattern>
</servlet-mapping>

【问题讨论】:

    标签: java email google-app-engine google-iap


    【解决方案1】:

    我刚刚尝试了App Engine Hello World example 作为基础和modified to accept incoming emails,它对我有用。我使用的目标电子邮件地址格式是recipient-user@PROJECT_ID.appspotmail.com

    我建议您使用开发应用服务器验证调试并验证以下内容:

    1. 当收到请求时,在您的邮件处理程序 servlet 中添加一些日志记录。您可以查看我发布的示例以获得一些指导。

    2. 转到http://localhost:8080/_ah/admin/inboundmail 以访问Development Console 中的Inbound Mail 页面并从那里发送测试电子邮件。

    3. 如果您查看服务器日志,如果配置正确,您应该会看到来自您的 servlet 的日志(即您在第 1 步中添加的日志)。

    4. 确认开发应用服务器一切正常后,将应用部署到 App Engine 并通过发送真实电子邮件进行测试,并通过 Stackdriver Logging 再次查看服务日志。除了您在第 1 步中添加的日志之外,您还应该看到针对此类传入邮件请求的 200 条响应。

    另外请注意,如果在几次重试后没有成功响应,许多电子邮件提供商将开始限制邮件到目标电子邮件 ID。这是首先使用开发应用服务器进行验证的另一个好理由。

    这是与 App Engine Hello World example 的区别:

    pom.xml

    --- a/appengine/helloworld/pom.xml
    +++ b/appengine/helloworld/pom.xml
    @@ -33,6 +33,11 @@ Copyright 2015 Google Inc.
           <version>2.5</version>
           <scope>provided</scope>
         </dependency>
    +    <dependency>
    +        <groupId>javax.mail</groupId>
    +        <artifactId>mail</artifactId>
    +        <version>1.5.0-b01</version>
    +    </dependency>
       </dependencies>
       <build>
         <!-- for hot reload of the web application -->
    

    src/main/java/com/example/appengine/helloworld/MailHandlerServlet.java

    --- /dev/null
    +++ b/appengine/helloworld/src/main/java/com/example/appengine/helloworld/MailHandlerServlet.java
    @@ -0,0 +1,36 @@
    +package com.example.appengine.helloworld;
    +
    +import java.io.IOException;
    +import java.util.logging.Logger;
    +import java.util.logging.Level;
    +import java.util.Properties;
    +
    +import javax.mail.Address;
    +import javax.mail.MessagingException;
    +import javax.mail.Session;
    +import javax.mail.internet.MimeMessage;
    +
    +import javax.servlet.http.HttpServlet;
    +import javax.servlet.http.HttpServletRequest;
    +import javax.servlet.http.HttpServletResponse;
    +
    +public class MailHandlerServlet extends HttpServlet {
    +
    +  private static final Logger log = Logger.getLogger(MailHandlerServlet.class.getName());
    +
    +  @Override
    +  public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    +    Properties props = new Properties();
    +    Session session = Session.getDefaultInstance(props, null);
    +    try {
    +      MimeMessage message = new MimeMessage(session, req.getInputStream());
    +      log.info("Received mail message content type: " + message.getContentType());
    +      for (Address addr : message.getFrom()) {
    +        log.info("Received mail from: " + addr);
    +      }
    +    } catch (MessagingException e) {
    +      log.log(Level.SEVERE, "Failed to handle incoming message:", e);
    +    }
    +    // ...
    +  }
    +}
    

    src/main/webapp/WEB-INF/appengine-web.xml

    --- a/appengine/helloworld/src/main/webapp/WEB-INF/appengine-web.xml
    +++ b/appengine/helloworld/src/main/webapp/WEB-INF/appengine-web.xml
    @@ -13,8 +13,11 @@
     -->
     <!-- [START config] -->
     <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
       <application>YOUR-PROJECT-ID</application>
       <version>YOUR-VERSION-ID</version>
       <threadsafe>true</threadsafe>
    +  <inbound-services>
    +    <service>mail</service>
    +  </inbound-services>
     </appengine-web-app>
     <!-- [END config] -->
    

    src/main/webapp/WEB-INF/web.xml

    --- a/appengine/helloworld/src/main/webapp/WEB-INF/web.xml
    +++ b/appengine/helloworld/src/main/webapp/WEB-INF/web.xml
    @@ -7,8 +7,17 @@
         <servlet-name>hello</servlet-name>
         <servlet-class>com.example.appengine.helloworld.HelloServlet</servlet-class>
       </servlet>
    +  <servlet>
    +    <servlet-name>mailhandler</servlet-name>
    +    <servlet-class>com.example.appengine.helloworld.MailHandlerServlet</servlet-class>
    +  </servlet>
       <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/</url-pattern>
       </servlet-mapping>
    +  <servlet-mapping>
    +    <servlet-name>mailhandler</servlet-name>
    +    <!-- /_ah/mail/* matches all email addressed to the app -->
    +    <url-pattern>/_ah/mail/*</url-pattern>
    +  </servlet-mapping>
     </web-app>
    

    【讨论】:

    • 嗨,正如我提到的,我对 appengine 入站邮件服务没有任何问题。如果我为我的项目激活新的 Google 身份识别代理 (IAP),就会出现问题。每个请求都由 IAP(Appengine、Endpoints 等)保护。似乎入站邮件服务也受到 IAP 的“保护”。这项服务不再像以前那样工作了。 Google Appengine 无论如何都没有收到邮件,激活 IAP 的邮件将被拒绝。我的问题仍然是,当 IAP 激活时,我应该如何配置邮件服务?
    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2021-06-07
    • 2017-09-20
    • 1970-01-01
    • 2011-03-06
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多