邮件API免费配额没有结算?

时间:2013-07-29 14:23:51

标签: java google-app-engine email billing

我一直在开发一个简单的应用程序,可以在用户填写表单时向我发送电子邮件。

我已经按照教程和复制了示例代码。但是当我尝试运行它时会抛出以下异常:

  

javax.servlet.ServletContext log:调度传入的RPC调用时发生异常   com.google.gwt.user.server.rpc.UnexpectedException:服务方法' public abstract int com.pablo.pabloweb.client.communication.SendEmailService.send(java.lang.String)'引发了意外的异常:com.google.apphosting.api.ApiProxy $ FeatureNotEnabledException:在管理控制台中启用结算后,将为此应用程序启用套接字API。     在com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)     在com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)     在com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)     在com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)   ...

我的问题是:有没有办法在不设置结算明细的情况下使用Mail API? 无论如何,我的申请不太可能超过限额。

如果需要,这是导致异常的代码:

public boolean actualSend(String msgText, String subject) {
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);

    try {
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("admin-gmail-email-address"));
        msg.addRecipient(Message.RecipientType.TO,
                         new InternetAddress("another-personal-email-address"));
        msg.setSubject(subject);
        msg.setText(msgText);
        Transport.send(msg);
        return true;
    } catch (AddressException e) {
        return false;
    } catch (MessagingException e) {
        return false;
    }
}

1 个答案:

答案 0 :(得分:2)

如果您只是向自己发送邮件,请使用具有最高配额的MailService的sendToAdmins方法: https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/mail/MailService#sendToAdmins(com.google.appengine.api.mail.MailService.Message)

顺便提一下,请注意您的应用程序正在获取套接字例外。这意味着您实际上并没有使用App Engine邮件服务,几乎可以肯定,因为您没有使用运行时中包含的JavaMail类。

无论如何,我建议切换到低级Mail API并使用sendToAdmins。但是,如果您不这样做,请尝试使用包含的JavaMail类,而不是使用您的App上传它们。