首次嘗試使用appengine郵件API。我構建了一個響應電子郵件的servlet。下面包含了我的web.xml文件和servlet類的相關摘錄。 然而,這個問題是我在測試@ [appid] .appspotmail.com發送一封電子郵件到應用程序後發生以下兩種情況: 1.記錄了許多日誌條目,用於處理servlet的請求,我的郵件配額已經達到了。 1/2小時後,我仍然看到有失敗的新日誌條目在AppEngine中收到郵件時的多個請求
Uncaught exception from servlet com.google.apphosting.api.ApiProxy$OverQuotaException: The API call mail.Send() required more quota than is available.
儘管如此,我還沒有收到過一封郵件。
另外,在我的servlet中有recordMessage
方法可以爲每個郵件請求保存數據存儲中的實體,以便我可以查看它們。我的查看器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>
Servlet的部分從我的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>
而且從我的郵件處理的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("[email protected]"));
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);
}
你有一個免費的配額每天發送100封郵件。您顯然已達到該配額,因此您現在正在收到此錯誤。但在你達到配額之前,你必須得到一種不同的例外,對吧? –
我明白我爲什麼現在得到這個錯誤。問題是爲什麼發送到appspotmail.com地址的單個消息導致請求被重複發送到我的處理程序servlet。在這種情況下預計配額錯誤,但情況本身是沒有意義的。有趣的是,我試着發表評論以實際發送回覆郵件並重新上傳。之後,我在日誌中再添加一個條目來處理一條消息(由於發送時沒有錯誤,它以ok狀態結束),然後停止。 –
,並回答這個問題,不,在配額問題之前,日誌中沒有其他錯誤。有些東西只是導致一個原始的消息被處理很多次......我想我只是一個白癡,可能已經找到了問題...... –