在GAE上使用Servlet发送电子邮件

时间:2013-04-27 10:51:48

标签: java web-services google-app-engine

我在我的应用程序中编写了以下代码

 public void send_email(String email)
 {
     Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.sendgrid.net");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("my_username","my_password");
                    }
                });

        Message message = new MimeMessage(session);
        try {

            message.setFrom(new InternetAddress("from@no-spam.com"));

            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("ramesh@abc.com"));

            message.setSubject("Testing Subject");

            message.setText("Dear Mail Crawler," +
                    "\n\n No spam to my email, please!");

            Transport.send(message);                


            System.out.println("Done");
        } catch (AddressException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


 }

这是在我的servlet类中调用的方法。 之后它执行得很好,并在控制台上显示“Done”,但我没有收到电子邮件收件箱中的任何电子邮件。

如果我运行与java应用程序相同的代码,它可以正常工作并收到一封电子邮件。

但是当我在谷歌网络服务器上运行它时,它无法工作.. 有一件事,我在这里从lib中删除了javaee.jar文件和mail.jar文件,但它仍然没有给出任何错误..

给我任何建议......

2 个答案:

答案 0 :(得分:1)

  

但是当我在谷歌网络服务器上运行它时它不起作用..

“Google网络服务器”在您的情况下意味着Google AppEngine?如果是这样,那么您不能使用完整的JavaMail API,但必须use Google's infrastructure

  

应用无法使用JavaMail界面连接到其他邮件   用于发送或接收电子邮件的服务。 SMTP配置   添加到传输或会话被忽略。

答案 1 :(得分:0)

请注意,您无法从任何电子邮件地址发送电子邮件。您需要使用在您应用的域中授权的一个。

  

发件人的电子邮件地址,发件人地址。发件人地址必须是以下类型之一:

     
      
  • 应用程序的注册管理员的地址。您可以   使用管理控制台将管理员添加到应用程序。

  •   
  • 使用a登录的当前请求的用户地址   Google帐户。您可以确定当前用户的电子邮件地址   使用用户API。用户的帐户必须是Gmail帐户,或者是   在由Google Apps管理的域上。

  •   
  • 任何有效的电子邮件接收地址   对于应用程序(例如xxx@APP-ID.appspotmail.com)。

  •   
  • 任何有效的电子邮件   接收域帐户的地址,例如support@example.com。   域帐户是Google域外的帐户,带有电子邮件   地址不以@ gmail.com或@ APP-ID.appspotmail.com结尾。

  •   

https://developers.google.com/appengine/docs/python/mail/sendingmail