2012-05-03 3 views
0

명령 행 인터페이스와 GWT 인터페이스가있는 OSGi 애플리케이션이 있습니다. 전자 메일을 보내는 별도의 번들이 있습니다. Apache Commons Email을 사용합니다.OSGi GWT org.apache.commons.mail.EmailException

전자 메일 번들은 전자 메일을 보내는 방법 하나만 제공하며 모든 속성은 현재 하드 코딩되어 있습니다.

전자 메일을 명령 줄에서 보내면 번들에 대한 참조를 얻고 문제없이 전자 메일을 보냅니다. 나는 GWT 인터페이스에서 이메일을 보낼 때

, 그것은 번들에 대한 참조를 가져옵니다 및 이메일을 보내려고 시도하고 다음과 같은 예외

org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.interzet.ru:25 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) at org.apache.commons.mail.Email.send(Email.java:1267) at com.ardor.email.internal.EmailServiceImpl.send(EmailServiceImpl.java:134) at com.ardor.email.internal.EmailServiceImpl.sendChangeEmail(EmailServiceImpl.java:66) at com.ardor.web.server.CustomerProxyServiceImpl.changeEmail(CustomerProxyServiceImpl.java:93) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:346) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442) at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:941) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Thread.java:662) Caused by: javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp at javax.mail.Session.getProvider(Session.java:229) at javax.mail.Session.getTransport(Session.java:338) at javax.mail.Session.getTransport(Session.java:368) at javax.mail.Transport.send(Transport.java:67) at javax.mail.Transport.send(Transport.java:48) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232)

방법이 될 수를 던져? 그것은 동일한 코드

HtmlEmail email = new HtmlEmail();

email.setHostName(SMTP_HOST); 
email.setAuthentication(SMTP_USER, SMTP_PASS); 

email.setFrom(SMTP_EMAIL, SMTP_NAME); 
email.addTo(emailAddress, customerName); 
email.setSubject("Subject"); 
email.setTextMsg("This is my message"); 
email.setHtmlMsg("This is the HTML"); 

email.send(); 

의아해를 실행! 이메일 보내기 전에이 삽입

답변

0

내가 뭔가 간단한 클래스 경로 오류로 판명하지만 왜에 관해서는 completly 모르겠습니다. OSGi 번들이 javax.mail_1.4.0.jar에 액세스 할 수 있었고 전쟁에 액세스 할 수없는 것 같습니다.

응용 프로그램 WEB-INF/lib에 추가 했으므로 이제는 정상적으로 작동합니다. GWT에서 호출하지 않을 때 그것을 액세스 할 수있는 OSGi 번들로에 액세스해야하는 이유

는 아직 나에게 아무 의미

0

시도 :

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
final Properties props = new Properties(); 
props.setProperty("mail.transport.protocol", "smtp"); 
props.setProperty("mail.host", SMTP_HOST); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "465"); 
props.put("mail.debug", "true"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.socketFactory.fallback", "false"); 
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(SMTP_USER, SMTP_PASS); 
    } 
}); 
+0

내 로컬 컴퓨터에서 테스트하고있어 내 ISP가 인증을 필요로하지 않습니다 SMTP 용. 또한 명령 줄에서 실행할 때도 작동합니다. 나는 스택 추적에서 그것이 다른 클래스를 로딩하는 방법이라고 생각한다. 스택 추적에는 GWT 응용 프로그램을 호스팅하는 Jetty가 포함되어 있습니다. – Kris