package com.util.mail;   
 
import java.security.Security; 
import java.util.Date; 
import java.util.Properties;   
 
import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage;   
 
import org.apache.log4j.Logger;   
 
 public static final void sendMail(String to, String title, String content) { 
  try { 
     Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
   final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
   Properties props = System.getProperties(); 
   props.setProperty("mail.smtp.host", "smtp.gmail.com"); 
   props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); 
   props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
   props.setProperty("mail.smtp.port", "465"); 
   props.setProperty("mail.smtp.socketFactory.port", "465"); 
   props.put("mail.smtp.auth", "true"); 
   final String username = "your@gmail.com"; 
   final String password = "your password"; 
   Session session = Session.getDefaultInstance(props, 
     new Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(username, 
         password); 
      } 
     });   
 
   // -- Create a new message -- 
   Message msg = new MimeMessage(session);   
 
   // -- Set the FROM and TO fields -- 
   msg.setFrom(new InternetAddress(to)); 
   msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse( 
     to, false)); 
   msg.setSubject(title); 
   msg.setText(content); 
   msg.setSentDate(new Date()); 
   Transport.send(msg);   
 
  } catch (MessagingException e) { 
   _log.error(e); 
     }   
  } 
}

  1. //set CLASSPATH=%CLASSPATH%;activation.jar;mail.jar
  2. import javax.mail.*;
  3. import javax.mail.internet.*;
  4. import java.util.*;
  5.  
  6. public class Mail
  7. {
  8.          String  d_email = "iamdvr@gmail.com",
  9.             d_password = "****",
  10.             d_host = "smtp.gmail.com",
  11.             d_port  = "465",
  12.             m_to = "iamdvr@yahoo.com",
  13.             m_subject = "Testing",
  14.             m_text = "Hey, this is the testing email using smtp.gmail.com.";
  15.     public static void main(String[] args)
  16.     {
  17.                 String[] to={"XXX@yahoo.com"};
  18.                 String[] cc={"XXX@yahoo.com"};
  19.                 String[] bcc={"XXX@yahoo.com"};
  20.                 //This is for google
  21.                         Mail.sendMail("venkatesh@dfdf.com","password","smtp.gmail.com","465","true",
  22. "true",true,"javax.net.ssl.SSLSocketFactory","false",to,cc,bcc,
  23. "hi baba don't send virus mails..","This is my style...of reply..
  24. If u send virus mails..");             
  25.     }
  26.  
  27.         public synchronized static boolean sendMail(String userName,String passWord,String host,String port,String starttls,String auth,boolean debug,String socketFactoryClass,String fallback,String[] to,String[] cc,String[] bcc,String subject,String text){
  28.                 Properties props = new Properties();
  29.                 //Properties props=System.getProperties();
  30.         props.put("mail.smtp.user", userName);
  31.         props.put("mail.smtp.host", host);
  32.                 if(!"".equals(port))
  33.         props.put("mail.smtp.port", port);
  34.                 if(!"".equals(starttls))
  35.         props.put("mail.smtp.starttls.enable",starttls);
  36.         props.put("mail.smtp.auth", auth);
  37.                 if(debug){
  38.                 props.put("mail.smtp.debug", "true");
  39.                 }else{
  40.                 props.put("mail.smtp.debug", "false");         
  41.                 }
  42.                 if(!"".equals(port))
  43.         props.put("mail.smtp.socketFactory.port", port);
  44.                 if(!"".equals(socketFactoryClass))
  45.         props.put("mail.smtp.socketFactory.class",socketFactoryClass);
  46.                 if(!"".equals(fallback))
  47.         props.put("mail.smtp.socketFactory.fallback", fallback);
  48.  
  49.         try
  50.         {
  51.                         Session session = Session.getDefaultInstance(props, null);
  52.             session.setDebug(debug);
  53.             MimeMessage msg = new MimeMessage(session);
  54.             msg.setText(text);
  55.             msg.setSubject(subject);
  56.             msg.setFrom(new InternetAddress("p_sambasivarao@sutyam.com"));
  57.                         for(int i=0;i<to.length;i++){
  58.             msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to[i]));
  59.                         }
  60.                         for(int i=0;i<cc.length;i++){
  61.             msg.addRecipient(Message.RecipientType.CC, new InternetAddress(cc[i]));
  62.                         }
  63.                         for(int i=0;i<bcc.length;i++){
  64.             msg.addRecipient(Message.RecipientType.BCC, new InternetAddress(bcc[i]));
  65.                         }
  66.             msg.saveChanges();
  67.                         Transport transport = session.getTransport("smtp");
  68.                         transport.connect(host, userName, passWord);
  69.                         transport.sendMessage(msg, msg.getAllRecipients());
  70.                         transport.close();
  71.                         return true;
  72.         }
  73.         catch (Exception mex)
  74.         {
  75.             mex.printStackTrace();
  76.                         return false;
  77.         }
  78.         }
  79.  
  80. }


우선 smtp를 지원하는 메일서비스만 할 수 있습니다.
naver는 지원하긴 하지만, 조낸 써야지 smtp를 사용할 수 있습니다.
저는 일반사용자인데 으뜸사용자가 되야하는 듯 합니다.
그래서 그냥 지원해주는 gmail이랑 daum메일로 테스트를 해봤습니다. 잘 되는군요.
기존에 25포트가 디폴트로 메일을 사용했는데 보안 때문에 SSL을 사용하고, smtps라는 프로토콜로 465번포트로 하는군요.
이건 좀 더 공부를 해봐야할 듯 싶네요. 그냥 기존의 ssl을 사용하지 않는 메일은 host랑 id랑 password만 지정해주면 돼요.


우선 설정파일입니다.
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
   
xmlns:p="http://www.springframework.org/schema/p"
   
xmlns:context=http://www.springframework.org/schema/context
   
xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
   
<context:component-scan base-package="mailtest" />


   
<!-- 일반용  
    <bean id="mailSender"
        class="org.springframework.mail.javamail.JavaMailSenderImpl"
        p:host="STMP서버주소"
        p:username="아이디"
        p:password="비밀번호" />
    -->

   
   
<!-- gmail, hanmail 용 -->
   
<bean id="mailSender"
       
class="org.springframework.mail.javamail.JavaMailSenderImpl"
       
p:host="한메일: pop.hanmail.net, 지메일:smtp.gmail.com"
       
p:port="465"
       
p:protocol="smtps"
       
p:username="아이디"
       
p:password="비밀번호">
       
<property name="javaMailProperties">
           
<props>
               
<prop key="mail.smtps.auth">true</prop>
               
<prop key="mail.smtps.startls.enable">true</prop>
               
<prop key="mail.smtps.debug">true</prop>
           
</props>
       
</property>
   
</bean>


   
<bean id="templateMessage"
       
class="org.springframework.mail.SimpleMailMessage"
       
p:from="송신자 주소"
       
p:to="수신자 주소"
       
p:subject="안녕!" />
   </beans>






templateMessage는 임시로 메세지를 지정해주는 것으로 미리 지정할 껀 지정하는 겁니다.
물론, 나중에 java코드에서 수정이 가능합니다.

서비스부분입니다.

MailTestService.java


package mailtest;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.stereotype.Service;
@Service public class MailTestService {     @Autowired     private MailSender mailSender;  
   
@Autowired     private SimpleMailMessage simpleMailMessage;       public void sendEmail()     {
        SimpleMailMessage msg = new SimpleMailMessage(this.simpleMailMessage);         msg.setText("난 종천이라고해!");         this.mailSender.send(msg);     } }



저기서 simpleMailMessage를 받아와서 text만 설정해줍니다. 저기서 msg.setTo하면 수신자도 설정할 수 있죠. 그리고 그냥 send메소드만 호출해주면 메일이 전송됩니다.

package mailtest;

import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MailTest {     public static void main(String[] args)     {         String configLocation = "applicationContext.xml";         ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);         MailTestService mailTestService = (MailTestService) context.getBean("mailTestService");         mailTestService.sendEmail();     } }

더욱 심화된 기능은 reference를 참조하세요
http://static.springframework.org/spring/docs/2.5.x/reference/mail.html

블로그 이미지

유효하지않음

,