为什么我不能从我的servlet发送电子邮件?

时间:2012-07-26 13:13:34

标签: java google-app-engine javamail

我正在尝试从我的servlet发送电子邮件。没有例外,但我没有在我的帐户中收到电子邮件。我使用以下代码:

 public class SendEmailServlet extends HttpServlet {
@SuppressWarnings({ "unchecked" })
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");
    PrintWriter out = resp.getWriter();
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try
    {
         String to[] = {"mygmail@gmail.com"};
            String host = "smtp.gmail.com";
            String username = "mygmail@gmail.com";
            String password = "password";
            Properties props = new Properties();
            props.put("mail.smtps.auth", "true");
            // ...
            Session session = Session.getInstance(props);
            MimeMessage msg = new MimeMessage(session);
            // set the message content here
            msg.setFrom(new InternetAddress(username,"Me"));
            msg.setSubject("Testing");
            msg.setText("Testing...");
            Address[] addresses = new Address[to.length];
            for (int i = 0; i < to.length; i++) {
                Address address = new InternetAddress(to[i]);               
                addresses[i] = address;
                // Add the given addresses to the specified recipient type.
                msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to[i]));
            } 

            Transport t = session.getTransport("smtps");

            t.connect(host, username, password);
            t.sendMessage(msg, msg.getAllRecipients());
            t.close();

            out.println(0);
        }
    }
    catch (Exception e)
    {
       System.out.println("Exception error: " + e);
       out.println(e);
    }
    finally
    {
        pm.close();
    }
}

}

我现在得到以下例外:

  Exception error: java.security.AccessControlException: access denied (java.net.SocketPermission smtp.gmail.com resolve)

任何人都可以告诉我为什么我没有收到电子邮件,这个代码有什么问题。 提前致谢

5 个答案:

答案 0 :(得分:0)

似乎错误似乎是:

props.put("mail.smtp.host","localhost");

在您的系统上运行邮件服务器之前,它不应该是 localhost

看看这个问题: Using Javamail to connect to Gmail smtp server ignores specified port and tries to use 25

和是,正如Axel所述,首先尝试使用命令行

答案 1 :(得分:0)

您是否在本地主机上运行电子邮件服务器?如果是,是否禁用了身份验证?

也许您可以在其日志中看到错误消息。

答案 2 :(得分:0)

原因是,您使用localhost作为smtp主机,在将localhost用作发件人之前,应在计算机上使用部署邮件服务器。即便如此,您可能需要注册您的服务器。

你也可以使用gmail或yahoo邮件。使用谷歌邮件的smtp主机。使用您的信用卡进行身份验证,然后继续。

试试这个链接:

http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

答案 3 :(得分:0)

通常,您可以使用JavaMail使用servlet发送邮件。您声明您正在使用AppEngine(Why can't i send email from my servlet and getting java.security.AccessControlException?)。 Google App Engine允许您使用JavaMail发送电子邮件,但您不能使用appengine提供的JavaMail连接到任何邮件服务器。添加到传输或会话的MAC地址配置将被忽略。 https://developers.google.com/appengine/docs/java/mail/usingjavamail#JavaMail_Features_Not_Supported

答案 4 :(得分:0)

阅读https://developers.google.com/appengine/docs/java/mail/overview 基本上停止在您的应用程序中包含任何JavaMail库,并且不要尝试连接到主机。构建消息并直接跳转到Transport.send(msg);