第一次尝试 appengine 邮件 API。我构建了一个响应电子邮件的 servlet。下面包括我的 web.xml 文件和 servlet 类的相关摘录。然而,问题是,在我通过 testing@[appid].appspotmail.com 向应用程序发送了一封电子邮件后,以下两种情况都发生了: 1. 记录了许多日志条目,用于对处理程序 servlet 和我的邮件的请求已达到当天的配额。1/2 小时后,我仍然看到失败的新日志条目
Uncaught exception from servlet com.google.apphosting.api.ApiProxy$OverQuotaException: The API call mail.Send() required more quota than is available.
尽管如此,我实际上还没有收到一封电子邮件。
此外,recordMessage
我的 servlet 中有一个方法可以为每个邮件请求保存数据存储中的一个实体,以便我可以查看它们。我的查看器 servlet 包含一个计数器,在我写这篇文章时,它的值是 109,并且仍在攀升,因此针对同一电子邮件发送了 100 多个请求。
我做错了什么,我希望每条消息都调用 servlet,然后实际收到一封电子邮件!
我的 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>
<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>
以及来自我的邮件处理程序 servlet 的相关方法。
@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);
}