我一直在开发一个简单的应用程序,可以在用户填写表单时向我发送电子邮件。
我已经按照教程和复制了示例代码。但是当我尝试运行它时会抛出以下异常:
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;
}
}
答案 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上传它们。