簡體   English   中英

使用播放框架通過Gmail SMTP服務器發送電子郵件時出現500內部服務器錯誤

[英]500 Internal Server Error while sending an email via Gmail SMTP server using play framework

我正在使用Java中的Play Framework實現聯系表單。 當我嘗試通過Gmail SMTP服務器發送電子郵件時,我在瀏覽器控制台中收到以下消息:

POST http://localhost:9000/app_contact_test.html 500 (Internal Server Error)             jquery-1.10.1.min.js:6

發送電子郵件的代碼( class Contact, function test() )如下:

      //Get the session object  
      Properties props = new Properties();  
      props.put("mail.smtp.host", "smtp.gmail.com");  
      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(username,password);
       }  
      });  

      //compose message  
      try {  
       MimeMessage message = new MimeMessage(session);  
       message.setFrom(new InternetAddress(username));
       message.addRecipient(Message.RecipientType.TO,new InternetAddress(recipient));  
       message.setSubject("Hello");  
       message.setText("Testing.......");  

       //send message  
       Transport.send(message);   
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }

堆棧跟蹤:

! Internal server error, for (POST) [/app_contact_test.html] ->
java.lang.NoClassDefFoundError: javax/mail/MessagingException
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.7.0]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442) ~[na:1.7.0]
at java.lang.Class.getMethod0(Class.java:2685) ~[na:1.7.0]
at java.lang.Class.getMethod(Class.java:1620) ~[na:1.7.0]
at org.apache.commons.lang3.reflect.MethodUtils.getMatchingAccessibleMethod(MethodUtils.java:511) ~[commons-lang3-3.1.jar:3.1]
at play.core.Router$HandlerInvoker$$anon$7$$anon$2$$anonfun$3.apply(Router.scala:178) ~[play_2.10-2.2.0.jar:2.2.0]
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0]
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) ~[na:1.7.0]
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ~[na:1.7.0]

更新 :Okey,我用MessagingException解決了這個問題,仍然收到錯誤,但是現在有了另一個跟蹤:

[error] play - Cannot invoke the action, eventually got an error: java.lang.SecurityException: Access to default session denied
[error] application -
! @6g8ee4hcb - Internal server error, for (POST) [/app_contact_sendEmail.html] ->
play.api.Application$$anon$1: Execution exception[[SecurityException: Access to default session denied]]
at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10-2.2.0.jar:2.2.0]
at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10-2.2.0.jar:2.2.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.0.jar:2.2.0]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.0.jar:2.2.0]
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10-2.2.0.jar:2.2.0]
Caused by: java.lang.SecurityException: Access to default session denied
at javax.mail.Session.getDefaultInstance(Session.java:327) ~[mail.jar:1.4.7]
at controllers.Contact.sendEmail(Contact.java:52) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$7$$anonfun$apply$7.apply(routes_routing.scala:129) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$7$$anonfun$apply$7.apply(routes_routing.scala:129) ~[na:na]
at play.core.Router$HandlerInvoker$$anon$7$$anon$2.invocation(Router.scala:183) ~[play_2.10-2.2.0.jar:2.2.0]
at play.core.Router$Routes$$anon$1.invocation(Router.scala:377) ~[play_2.10-2.2.0.jar:2.2.0]

在所有教程中,沒有任何關於500服務器錯誤或外部屬性來避免它。 有幫助嗎?

哦,我通過在CLASSPATH中添加“mail.jar”解決了第一個問題。 它實際上有點令人困惑,因為在Play文檔編寫時,外部jar必須放在“lib”文件夾中,這應該足夠了。

第二個問題是通過改變從郵件會話獲取道具的方法來解決的

Session.getDefaultInstance(props, ...);

Session.getInstance(props, ...);

所以現在我可以發送電子郵件了。 希望它能幫助另一個有同樣問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM