1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.core.mail;
17  
18  import org.kuali.rice.core.api.config.property.ConfigContext;
19  import org.springframework.beans.factory.config.AbstractFactoryBean;
20  import org.springframework.mail.javamail.JavaMailSenderImpl;
21  
22  import javax.mail.Authenticator;
23  import javax.mail.PasswordAuthentication;
24  import javax.mail.Session;
25  import java.util.Properties;
26  
27  
28  
29  
30  
31  
32  
33  
34  @SuppressWarnings("unchecked")
35  public class MailSenderFactoryBean extends AbstractFactoryBean {
36  
37  	protected final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MailSenderFactoryBean.class);
38  	
39      private static final String MAIL_PREFIX = "mail";
40      private static final String USERNAME_PROPERTY = "mail.smtp.username";
41      private static final String PASSWORD_PROPERTY = "mail.smtp.password";
42      private static final String HOST_PROPERTY = "mail.smtp.host";
43      private static final String PORT_PROPERTY = "mail.smtp.port";
44      
45      private Session mailSession;
46      
47      @Override
48  	protected  Object createInstance() throws Exception {
49  	    
50  		Properties properties = new Properties();
51  		Properties configProps = ConfigContext.getCurrentContextConfig().getProperties();
52  		LOG.debug("createInstance(): collecting mail properties.");
53  		for (Object keyObj : configProps.keySet()) {
54  		    if (keyObj instanceof String) {
55  		    	String key = (String)keyObj;
56  		    	if (key.startsWith(MAIL_PREFIX)){
57  		    		properties.put(key, configProps.get(key));
58  		    	}
59  		    }
60  		}
61  		
62  		
63  		
64  		String username = properties.getProperty(USERNAME_PROPERTY);
65  		String password = properties.getProperty(PASSWORD_PROPERTY);
66  		if (username != null && password != null) {
67  			mailSession = Session.getInstance(properties, new SimpleAuthenticator(username, password));
68  			LOG.info("createInstance(): Initializing mail session using SMTP authentication.");
69  		} else {
70  			mailSession = Session.getInstance(properties);
71  			LOG.info("createInstance(): Initializing mail session. No SMTP authentication.");
72  		}
73  		
74  		
75  		JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
76  		LOG.debug("createInstance(): setting SMTP host.");
77  		mailSender.setHost(properties.getProperty(HOST_PROPERTY));
78  		if (properties.getProperty(PORT_PROPERTY) != null) {
79  			LOG.debug("createInstance(): setting SMTP port.");
80  			int smtpPort = Integer.parseInt(properties.getProperty(PORT_PROPERTY).trim());
81  			mailSender.setPort(smtpPort);
82  		}
83  		mailSender.setSession(mailSession);
84  		
85  		LOG.info("createInstance(): Mail Sender Factory Bean initialized.");
86  		return mailSender;
87      }
88      
89      private class SimpleAuthenticator extends Authenticator {
90      	
91      	private final PasswordAuthentication passwordAuthentication;
92  
93          private SimpleAuthenticator(String username, String password) {
94          	this.passwordAuthentication = new PasswordAuthentication(username, password);
95          }
96  
97          public PasswordAuthentication getPasswordAuthentication() {
98              return passwordAuthentication;
99          }
100     }
101     
102     @SuppressWarnings("unchecked")
103 	@Override
104     public Class getObjectType() {
105 	return JavaMailSenderImpl.class;
106     }
107 
108 }