Возникли проблемы с получением электронной почты для работы, следуя учебному пособию по Google App Engine для Java - PullRequest
0 голосов
/ 28 сентября 2010

Я работал над учебником по Google App Engine .

Я ввел код, показанный в разделе 6, а затем попытался проверить функциональность в соответствии с инструкциями.

Однако, независимо от того, какой адрес электронной почты я указал в поле To: формы, я получаю сообщение об ошибке, похожее на это:

Message send failure
HTTP ERROR 404
Problem accessing /_ah/mail/someemail@gmail.com. Reason:
    NOT_FOUND
Powered by Jetty://

Событие, хотя тест, по-видимому, не удался, я развернул приложение наappspot.com

Здесь я даже не смог получить доступ к / _ah / mail /, поэтому отправил электронное письмо из Outlook.Приложение не получило его, и следующее пришло в норму:

Delivery to the following recipient failed permanently:

     whatever@fromsometutorial.applicationid.appspotmail.com

----- Original message -----

Received: by 10.204.82.130 with SMTP id b2mr13438bkl.0.1285692691837;
        Tue, 28 Sep 2010 09:51:31 -0700 (PDT)
Return-Path: <kessler.bm@gmail.com>
Received: from mail-bw0-f46.google.com (mail-bw0-f46.google.com
[209.85.214.46])
        by gmr-mx.google.com with ESMTP id z25si3874412bku.
5.2010.09.28.09.51.30;
        Tue, 28 Sep 2010 09:51:30 -0700 (PDT)
Received-SPF: pass (google.com: domain of kessler.bm@gmail.com designates 209.85.214.46 as permitted sender) client-ip=209.85.214.46;
Authentication-Results: gmr-mx.google.com; spf=pass (google.com:
domain of kessler.bm@gmail.com designates 209.85.214.46 as permitted
sender) smtp.mail=kessler.bm@gmail.com; dkim=pass (test mode) header.i=@gmail.com
Received: by bwz11 with SMTP id 11so5254251bwz.5
        for <whatever@fromsometutorial.applicationid.appspotmail.com>;
Tue, 28 Sep 2010 09:51:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=gamma;
        h=domainkey-signature:received:received:reply-
to:from:to:subject:date
         :organization:message-id:mime-version:content-type
         :content-transfer-encoding:x-mailer:thread-index:x-mimeole;
        bh=5hMmQ/fy4AdMWGj7dA7tHInFNumFfhg24xHggsIZKR4=;
        b=OitMOXiZONheUMpkDU8mVUdWhk2AhUAuBbnSnyqDs1WWOPx0Ao75bWHBZZ/
lhRtOO+
         yMvLhDvrN+/cTDnxuQI6ICBb1KZh9eeExMrgdaQGV+/
pnaBK3PAEotfL8QgX81V1AKFE
         j58cbhxWUH0JSTVckXucribInLNCNJnIqvyD0=
DomainKey-Signature: a=rsa-sha1; c=nofws;
        d=gmail.com; s=gamma;
        h=reply-to:from:to:subject:date:organization:message-id:mime-
version
         :content-type:content-transfer-encoding:x-mailer:thread-index
         :x-mimeole;

b=Adh4j5+8xWF7MKIT6YTBE8PXH2iQG4yi2hulXgQ0QL5ZB1qmTNJiu5U2MlwWzJF7zQ
         DR1uBnwVNu0WtZxzHbneVsZY
+aSH8sPrmgPFTZSHTGcCU0+SXW9UjyZndVJdFhPP2Nfc
         GBeolrTikuhBtU+1F9T23io6wJqEwLg7X6HnU=
Received: by 10.204.58.75 with SMTP id f11mr192120bkh.
138.1285692690387;
        Tue, 28 Sep 2010 09:51:30 -0700 (PDT)
Return-Path: <kessler.bm@gmail.com>
Received: from blackbox (catv-86-101-152-197.catv.broadband.hu
[86.101.152.197])
        by mx.google.com with ESMTPS id 11sm5779682bkj.
23.2010.09.28.09.51.27
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Tue, 28 Sep 2010 09:51:29 -0700 (PDT)
Reply-To: <kessler.bm@gmail.com>
From: "Brian Kessler" <kessler.bm@gmail.com>
To: <whatever@fromsometutorial.applicationid.appspotmail.com>
Subject: Go south
Date: Tue, 28 Sep 2010 18:52:12 +0200
Organization: Flux Szerviz BT.
Message-ID: <A878B05D923A4EDEBC8015D3B5448D2F@blackbox>
MIME-Version: 1.0
Content-Type: text/plain;
    charset="us-ascii"
Content-Transfer-Encoding: 7bit
X-Mailer: Microsoft Office Outlook 11
thread-index: ActfLX7QaTtIrEoETYWtToubxBHBOw==
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5994

Way down south to mexico

--
Brian Kessler
kessler.bm@gmail.com
+36 30 637 1824

Следуя предложенному ниже предложению, я изменил

<servlet-mapping>
    <servlet-name>Email</servlet-name>
    <url-pattern>/_ah/mail/*</url-pattern>
</servlet-mapping>

учебника так:

<servlet-mapping>
    <servlet-name>Email</servlet-name>
    <url-pattern>/_ah/mail/.+</url-pattern>
</servlet-mapping>

, которая радикально изменила ошибку, когда я попытался отправить электронное письмо на локальный сервер:

Message send failure
HTTP ERROR 500
Problem accessing /_ah/mail/kessler.bm@gmail.com. Reason:
    de/vogella/gae/java/todo/dao/Dao
Caused by:
java.lang.NoClassDefFoundError: de/vogella/gae/java/todo/dao/Dao
    at de.vogella.gae.java.todo.EmailServlet.doPost(EmailServlet.java:43)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.ClassNotFoundException: de.vogella.gae.java.todo.dao.Dao
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 28 more
Caused by:
java.lang.ClassNotFoundException: de.vogella.gae.java.todo.dao.Dao
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:151)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at de.vogella.gae.java.todo.EmailServlet.doPost(EmailServlet.java:43)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:349)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Powered by Jetty://

Однако, согласно руководству, существует de.vogella.gae.java.todo.dao.Dao.как перечисление вместо класса.Я пытался изменить это на класс, но затмение сразу начало жаловаться

Syntax Error on token "INSTANCE".  VariableDeclarator expected after this token.

Неужели оригинальное руководство делает так много ошибок?И как я могу это исправить?

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

В учебнике отсутствует этот раздел в файле web.xml

<security-constraint>
  <web-resource-collection>
    <url-pattern>/_ah/mail/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
  </auth-constraint>
</security-constraint>

отметьте здесь

1 голос
/ 28 сентября 2010

Вашему web.xml нужна запись, соответствующая /_ah/mail/*, с отображением сервлета, который обрабатывает эти адреса.

0 голосов
/ 02 августа 2011

Вы сказали:

Однако, согласно руководству, de.vogella.gae.java.todo.dao.Dao существует как перечисление вместо класса.Я попытался изменить это на класс, но затмение сразу начало жаловаться

На самом деле, enum в java скомпилирован в классы.Вот выдержка из страницы Java Tutorials по перечислениям :

Объявление enum определяет класс (называемый типом enum).Тело класса enum может включать в себя методы и другие поля.Компилятор автоматически добавляет некоторые специальные методы при создании перечисления.Например, у них есть метод статических значений, который возвращает массив, содержащий все значения перечисления в порядке их объявления.

Ошибка, которую вы видите после преобразования перечисления в класс, заключается в том, чтострока INSTANCE; пытается определить константу перечисления, и вы можете сделать это только в перечислении, а не в обычном классе.

Оригинальный ava.lang.NoClassDefFoundError просто означал, что скомпилированный (enum) класс отсутствует во время выполнения.Вам нужно проверить war/WEB-INF/lib/classes, чтобы убедиться, что компиляция Dao.class присутствует в пакете de.vogella.gae.java.todo.dao.

Кстати, автор этого урока использует enum для реализации одноэлементного паттерна .

0 голосов
/ 02 августа 2011

У меня была похожая проблема (с использованием Python, поэтому файлы конфигурации yaml, а не XML), и причина оказалась в том, что я поставил:

- url: /_ah/mail/.+ 
  script: handle_incoming_email.py 
  login: admin

перед существующей записью для всех:

- url: /.*
  script: main.py

Это выдало 404 с на сервере и «Ошибка отправки сообщения» при отправке тестовых сообщений.

Перемещение после записи все-таки решило проблему.

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