1

我的应用程序上有一个按钮,它必须检查输入的数据是否正确,将其添加到数据库并发送电子邮件,它由以下代码表示:

<%@ 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 顾问。

4

1 回答 1

0

GAE 自带 SMTP 服务器,因此您无需设置自己的 SMTP 参数:https ://developers.google.com/appengine/docs/java/mail/usingjavamail

但是,如果您确实设置了自己的 SMTP 参数,那么 GAE 将使用具有此限制的套接字。这些适用于您的情况:

  1. 套接字仅适用于付费应用程序 -这是产生错误的应用程序。
  2. 端口 25 (SMTP) 被阻止
  3. Google IP 范围被阻止,Gmail SMTPS 除外:smtp.gmail.com 端口 465 和 587
于 2013-09-03T11:51:44.773 回答