我的应用程序上有一个按钮,它必须检查输入的数据是否正确,将其添加到数据库并发送电子邮件,它由以下代码表示:
<%@ page import = "java.text.*" %>
<%@ page import="java.io.*,java.util.*,javax.mail.*, javax.mail.Service"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
[...]
<a href="javascript:void();" onclick="
javascript:if(confirmaEnviar())$('#usuario').submit();
<% String result;
// Recipient's email ID needs to be mentioned.
String host = "smtp.gmail.com";
String to = "existingdirection@gmail.com";
String from = "existingdirection2@gmail.com";
String subject = "test";
String messageText = "body test";
Properties props = System.getProperties();
props.put("mail.host", host);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.port", "25");
// If using authentication, otherwise comment out
props.put("mail.smtp.auth", "true");
// Gmail requires TLS, your server may not
props.put("mail.smtp.starttls.enable", "true");
Session mailSession = Session.getDefaultInstance(props, null);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(messageText);
Transport transport = mailSession.getTransport("smtp");
//connect with authentication
transport.connect(host,"existingdirection2@gmail.com" , "password");
transport.sendMessage(msg, address);
transport.close();
%>
return false;" class="button button-alt">ENVIAR</a></div>
但是如果我上传它并尝试执行它,我会在浏览器中收到错误:错误:服务器错误服务器遇到错误,无法完成您的请求。
我曾认为可能无法以这种方式调用 jsp 代码(在 onclick 中间),但是如果我将它放到代码的另一个位置(在 html 标签中间),错误仍然会重现。
我已将 java 邮件库添加到 java 构建路径,并将其复制到 lib 目录。
当然,已经测试过失败的是与电子邮件相关的代码,如果我从应用程序中删除它,其余的都很好。
还检查了密码的电子邮件方向是否正确。
我正在使用 GAE 来托管应用程序。
知道可能会发生什么吗?
我很感激你的帮助。
编辑:那是堆栈跟踪,猜它毕竟不是与代码相关的问题。
com.google.apphosting.api.ApiProxy$FeatureNotEnabledException:在管理控制台中启用计费后,将为该应用程序启用 Socket API。在 java.lang.Thread.getStackTrace(Thread.java:1567) 在 com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:259) 在 com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl. java:68) 在 com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:202) 在 com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:199) 在 java.security.AccessController .doPrivileged(Native Method) 在 com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:199) 在 com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:68) 在 com.google.apphosting .api.ApiProxy.makeSyncCall(ApiProxy.java:107) 在 com.google.apphosting.api。
奇怪的是 Google Api 的控制台中没有称为 Socket API 的 API,我想我也会尝试联系 google 顾问。