GAE с IAP (Identity Aware Proxy) и службой входящей почты

У меня есть стандартный проект 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>

веб.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>

person Dev Moerker    schedule 07.07.2017    source источник


Ответы (1)


Я только что попробовал пример App Engine Hello World в качестве основы и изменено для приема входящих сообщений электронной почты и это работает для меня. Формат адреса электронной почты получателя, который я использовал, — recipient-user@PROJECT_ID.appspotmail.com.

Я бы рекомендовал вам проверить отладку с помощью сервера приложений для разработки и проверить следующее:

  1. Добавьте запись в сервлет обработчика почты, когда он получает запрос. Вы можете посмотреть пример, который я разместил для некоторых указателей.

  2. Перейдите на страницу http://localhost:8080/_ah/admin/inboundmail, чтобы получить доступ к странице Inbound Mail в Development Console, и отправьте оттуда тестовое письмо.

  3. Если вы посмотрите на журналы сервера, вы должны увидеть журналы вашего сервлета (то есть те, которые вы добавили на шаге 1), если конфигурация правильная.

  4. Убедившись, что с сервером приложений для разработки все работает, разверните приложение в App Engine и протестируйте его, отправив реальное электронное письмо, и еще раз просмотрите журналы службы с помощью Stackdriver Logging. Вы должны увидеть 200 ответов на такие входящие почтовые запросы в дополнение к журналам, которые вы добавили на шаге 1.

Также обратите внимание, что многие почтовые провайдеры начинают блокировать почту на адрес электронной почты назначения, если после нескольких попыток не получен успешный ответ. Это еще одна веская причина сначала проверить использование сервера приложений для разработки.

Вот отличие от примера App Engine Hello World, где я получил это работает:

пом.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>
person Tuxdude    schedule 09.07.2017
comment
Привет, как я уже упоминал, у меня нет проблем со службой входящей почты appengine. Проблема возникает, если я активирую новый Google Identity Aware Proxy (IAP) для своего проекта. Каждый запрос защищен IAP (Appengine, Endpoints и т. д.). Похоже, что служба входящей почты также защищена IAP. Эта услуга уже не работала, как прежде. Google Appengine все равно не получил письмо, с активированным IAP письма будут отклонены. Мой вопрос все еще в том, как мне настроить почтовый сервис при активации IAP? - person Dev Moerker; 10.07.2017