001    package com.hs.mail.smtp.server;
002    
003    import java.io.FileNotFoundException;
004    import java.io.FileOutputStream;
005    import java.io.PrintStream;
006    
007    import org.springframework.beans.factory.InitializingBean;
008    
009    import com.hs.mail.container.config.Config;
010    import com.hs.mail.container.server.DefaultServer;
011    import com.hs.mail.container.server.socket.DefaultServerSocketFactory;
012    import com.hs.mail.container.server.socket.TLSServerSocketFactory;
013    
014    /**
015     * 
016     * @author Won Chul Doh
017     * @since Jun 20, 2010
018     * 
019     */
020    public class SmtpServer extends DefaultServer implements InitializingBean {
021            
022            private boolean useTLS = false;
023            
024            public void setUseTLS(boolean useTLS) {
025                    this.useTLS = useTLS;
026            }
027    
028            public boolean isUseTLS() {
029                    return useTLS;
030            }
031            
032            public void afterPropertiesSet() throws Exception {
033                    // Configure the server
034                    connectionTimeout = (int) Config.getNumberProperty("smtp_timeout", 300000); 
035                    connectionHandler = new SmtpConnectionHandler();
036                            
037                    if ("true".equals(Config.getProperty("smtp_trace_protocol", "false"))) {
038                            ((SmtpConnectionHandler) connectionHandler).setDebug(true);
039                            String path = Config.getProperty("smtp_protocol_log", null);
040                            if (path != null) {
041                                    try {
042                                            FileOutputStream fos = new FileOutputStream(path);
043                                            ((SmtpConnectionHandler) connectionHandler)
044                                                            .setDebugOut(new PrintStream(fos));
045                                    } catch (FileNotFoundException e) {
046                                            // Ignore this exception
047                                    }
048                            }
049                    }
050                    serverSocketFactory = (isUseTLS()) 
051                                    ? new TLSServerSocketFactory(Config.getSSLContext())
052                                    : new DefaultServerSocketFactory();
053                    
054                    super.configure();
055                    
056                    // Start the server
057                    start();
058            }
059            
060    }