[jboss-user] [JNDI/Naming/Network] - Trying to send e-mail using JavaMail, JBoss 5, and JNDI

socal_javaguy do-not-reply at jboss.com
Fri Aug 21 20:12:25 EDT 2009


Hello there,

Am using JBoss 5.1.0GA and JDK 1.5.0_19 on OS X Leopard.

Created a working  [SendMailServlet|http://tinyurl.com/SendMailServletCode]. 

Have now decided to refactor it into two separate classes (extract out JavaMail code to a separate class and create a ServletController).

Am also trying to use JNDI to access the connection properties in the mail-service.xml configuration file residing in JBoss.

The Mailer class contains the reusable functionality needed to send an e-mail:


  | public class Mailer {
  | 	private Session mailSession;
  | 
  | 	protected void sendMsg(String email, String subject, String body)
  | 	throws MessagingException, NamingException {
  | 		Properties props = new Properties();
  | 		InitialContext ictx = new InitialContext(props);
  | 		Session mailSession = (Session) ictx.lookup("java:/Mail");
  | //		Session mailSessoin = Session.getDefaultInstance(props);
  | 		String username = (String) props.get("mail.smtps.user");
  | 		String password = (String) props.get("mail.smtps.password");
  | 
  | 		MimeMessage message = new MimeMessage(mailSession);
  | 		message.setSubject(subject);
  | 		message.setRecipients(javax.mail.Message.RecipientType.TO,
  | 				javax.mail.internet.InternetAddress.parse(email, false));
  | 		message.setText(body);
  | 		message.saveChanges();
  | 
  | 		Transport transport = mailSession.getTransport("smtps");
  | 		try {
  | 			transport.connect(username, password);
  | 			transport.sendMessage(message, message.getAllRecipients());
  | 			Logger.getLogger(this.getClass()).warn("Message sent");
  | 		}
  | 		finally {
  | 			transport.close();
  | 		}
  | 	}
  | }
  | 

The MailController class serves as a standard Java Servlet which invokes the Mailer.class's sendMsg() method:


  | public class MailController extends HttpServlet {
  | 	/** static final HTML setting for content type */
  | 	private static final String HTML = "text/html";
  | 
  | 	myapp/** static final HTML setting for content type */
  | 	private static final String PLAIN = "text/plain";
  | 
  | 	public void doGet(HttpServletRequest request, HttpServletResponse response)
  | 	throws ServletException, IOException {
  | 		doPost(request, response);
  | 	}
  | 
  | 	public void doPost(HttpServletRequest request, HttpServletResponse response)
  | 	throws ServletException, IOException {
  | 		response.setContentType(PLAIN);
  | 		PrintWriter out = response.getWriter();
  | 		String mailToken = TokenUtil.getEncryptedKey();
  | 		String body = "Hello there, " + "\n\n"
  | 		          + "Wanna play a game of golf?" + "\n\n"
  | 			  + "Please confirm: https://localhost:8443/myapp/confirm?token="
  | 			  + mailToken + "\n\n" + "-Golf USA";
  | 		Mailer mailer = new Mailer();
  | 		try {
  | 			mailer.sendMsg("recipient at gmail.com", "Golf Invitation!", body);
  | 			out.println("Message Sent");
  | 		}
  | 		catch (MessagingException e) {
  | 			e.printStackTrace();
  | 		}
  | 		catch (NamingException e) {
  | 			e.printStackTrace();
  | 		}
  | 	}
  | }
  | 

Have the mail configuration set under $JBOSS_HOME/server/default/deploy/mail-service.xml:


  | <server>
  |   <mbean code="org.jboss.mail.MailService" name="jboss:service=Mail">
  |     <attribute name="JNDIName">java:/Mail</attribute>
  |     <attribute name="User">user</attribute>
  |     <attribute name="Password">password</attribute>
  |     <attribute name="Configuration">
  |       <configuration>
  |         <property name="mail.store.protocol" value="pop3"/>
  |         <property name="mail.transport.protocol" value="smtp"/>
  |         <property name="mail.user" value="user"/>
  |         <property name="mail.pop3.host" value="pop3.gmail.com"/>
  |         <property name="mail.smtp.host" value="smtp.gmail.com"/>
  |         <property name="mail.smtp.port" value="25"/>
  |         <property name="mail.from" value="user at gmail.com"/>
  |         <property name="mail.debug" value="true"/>
  |       </configuration>
  |     </attribute>
  |     <depends>jboss:service=Naming</depends>
  |   </mbean>
  | </server>
  | 

web.xml (Deployment Descriptor):


  | <servlet>
  |     <servlet-name>MailController</servlet-name>
  |     <servlet-class>com.myapp.MailController</servlet-class>
  | </servlet>
  | 
  | <servlet-mapping>
  |     <servlet-name>MailController</servlet-name>
  |     <url-pattern>/sendmail</url-pattern>
  | </servlet-mapping>
  | 

This is what is outputted when I start JBOSS and click point my browser to:

https://localhost:8443/myapp/sendmail


  | [MailService] Mail Service bound to java:/Mail
  | 
  | [STDOUT] DEBUG: JavaMail version 1.4ea
  | [STDOUT] DEBUG: java.io.FileNotFoundException: 
  |    
  | /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/javamail.providers 
  | (No such file or directory)
  | 
  | [STDOUT] DEBUG: !anyLoaded
  | [STDOUT] DEBUG: not loading resource: /META-INF/javamail.providers
  | [STDOUT] DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
  | 
  | [STDOUT] DEBUG: getProvider() returning 
  | javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc]
  | 
  | [STDOUT] DEBUG SMTP: useEhlo true, useAuth false
  | [STDOUT] DEBUG SMTP: trying to connect to host "localhost", port 465, isSSL true
  | 
  | [STDERR] javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 465;
  |   nested exception is:
  | 	java.net.ConnectException: Connection refused
  | [STDERR]  at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
  | [STDERR]  at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
  | [STDERR]  at javax.mail.Service.connect(Service.java:275)
  | [STDERR]  at javax.mail.Service.connect(Service.java:156)
  | [STDERR]  at javax.mail.Service.connect(Service.java:176)
  | [STDERR]  at com.myapp.Mailer.sendMsg(Mailer.java:45)
  | [STDERR]  at com.myapp.MailController.doPost(MailController.java:42)
  | [STDERR]  at com.myapp.MailController.doGet(MailController.java:26)
  | 

Why am I getting this java.net.ConnectException: Connection refused exception?

Happy programming,

Mike

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4250979#4250979

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4250979



More information about the jboss-user mailing list