0

初めて appengine メール API を試す。メールに応答するサーブレットを作成しました。私の web.xml ファイルとサーブレット クラスからの関連する抜粋を以下に示します。ただし、問題は、testing@[appid].appspotmail.com でアプリに 1 通の電子メールを送信した後、次の両方が発生したことです。 1日の定員に達しました。1/2 時間後、まだエラーのある新しいログ エントリが表示されます

Uncaught exception from servlet com.google.apphosting.api.ApiProxy$OverQuotaException: The API call mail.Send() required more quota than is available.

それにもかかわらず、私は実際に 1 通の電子メールを受け取っていません。

また、recordMessageサーブレットには、メール要求ごとにエンティティをデータストアに保存するメソッドがあり、それらを表示できます。私のビューアー サーブレットにはカウンターが含まれており、これを書いている時点では 109 で、まだ上昇しているため、同じメールに対して 100 を超える要求が送信されています。

メッセージごとにサーブレットを 1 回呼び出すと、実際に電子メールを受信するはずです。

私の appengine-web.xml ファイル:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>bdl-mail-testing</application>
  <version>testing</version>
  <threadsafe>true</threadsafe>

  <inbound-services>
    <service>mail</service>
  </inbound-services>
</appengine-web-app>

私の web.xml ファイルのサーブレットセクション:

<servlet>
  <servlet-name>mailhandler</servlet-name>
  <servlet-class>com.bdl.appengine.mailtesting.MailHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>mailhandler</servlet-name>
  <url-pattern>/_ah/mail/*</url-pattern>
</servlet-mapping>

<servlet>
  <servlet-name>messageviewer</servlet-name>
  <servlet-class>com.bdl.appengine.mailtesting.MessageViewerServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>messageviewer</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

そして、私のメールハンドラーサーブレットからの関連メソッド。

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  Properties props = new Properties();
  Session session = Session.getDefaultInstance(props, null);
  try {
    MimeMessage message = new MimeMessage(session, req.getInputStream());
    String content = message.getContent().toString();
    recordMessage(message.getSubject(), content);
    replyTo(session, getFullPath(req), message);
  } catch (MessagingException ex) {
    log.log(Level.SEVERE, "An error occurred processing the message.", ex);
  }
}

private void replyTo(Session session, String path, Message message) throws MessagingException {
  Message msg = new MimeMessage(session);
  String subject = message.getSubject();
  if (!subject.toLowerCase().startsWith("re: ")) {
    subject = "RE: " + subject;
  }
  msg.setSubject(subject);
  msg.setFrom(new InternetAddress("mail@bdl-mail-testing.appspot.com"));
  msg.addRecipients(Message.RecipientType.TO, message.getFrom());
  Multipart multipart = new MimeMultipart();
  BodyPart part = new MimeBodyPart();
  // Add a response
  part.setText(String.format("I got your message!\n\nReceived at: %s\n\n", path));
  multipart.addBodyPart(part);
  part = new MimeBodyPart();
  part.setDataHandler(message.getDataHandler());
  multipart.addBodyPart(part);
  msg.setContent(multipart);

  log.log(Level.INFO, String.format("Replied to a message: %s", subject));
  Transport.send(message);
}
4

1 に答える 1

0

申し訳ありませんが、それは私の愚かさでした。 その結果、同じメッセージを自分自身に再送信し、それを再処理し続けましたTransport.send(message);Transport.send(msg);

于 2013-09-30T16:01:29.160 に答える