初めて 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);
}