2013-11-10 2 views
0

Я реализую контактную форму с помощью Play Framework в Java. Когда я пытаюсь отправить по электронной почте через сервер Gmail SMTP я получил следующее сообщение в консоли браузера:500 Внутренняя ошибка сервера при отправке электронной почты через SMTP-сервер Gmail с использованием среды воспроизведения

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); 
     } 

Stack след:

! 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] 

Update: Окей, я решил вопрос с 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 Ошибке сервера или внешние свойства, чтобы избежать этого. Любая помощь?

+0

След стека, пожалуйста? – MattSenter

+0

Обновлено сообщение. Уже пытается решить проблему с классом MessagingException. – Bfcm

ответ

2

Okey, я решил первую проблему, добавив «mail.jar» в CLASSPATH. Это на самом деле немного запутанно, потому что в Play Documentation написано, что внешние банки должны быть в папке «lib», и этого должно быть достаточно.

Вторая проблема решена путем изменения способа получения реквизита для почтового сеанса от

Session.getDefaultInstance(props, ...); 

в

Session.getInstance(props, ...); 

Так что теперь я могу отправить по электронной почте. Надеюсь, это поможет другим людям, которые будут иметь такую ​​же проблему.

Смежные вопросы