티스토리 뷰

Java/Util

JAVAMAIL로 ssl메일 보내기 1

Mr.Kang 2008. 7. 26. 13:44

메일 Sender을 구현한다.

 

package kr.co.ui2.mail.smtps;

import java.security.Security;
import java.util.ArrayList;
import java.util.List;
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.URLName;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.mail.smtp.SMTPSSLTransport;
import com.sun.net.ssl.internal.ssl.Provider;

public class MailSender {
 
 private String smtpHost;
 private String smtpStarttlsEnable;
 private String smtpAuth;
 private int smtpPort;
 private String transportProtocol;
 private String masterId;
 private String masterPwd;
 private String mailTitle;
 private String mailContent;
 private List<String> revUserMails = new ArrayList<String>();
 
 
 /**
  * @param id      이메일 계정 아이디
  * @param pwd     이메일 계정 비밀번호
  * @param smtpHost    호스트명
  * @param smtpStarttlsEnable SSL사용여부
  * @param smtpAuth    AUTH 사용여부
  * @param transportProtocol  사용 프로토콜
  * @param smtpPort    SMTP 포트
  */
 public void setAccount(String id, String pwd, String smtpHost, String smtpStarttlsEnable,
   String smtpAuth, String transportProtocol, int smtpPort) {
  this.masterId = id;
  this.masterPwd = pwd;
  this.smtpHost = smtpHost;
  this.smtpStarttlsEnable = smtpStarttlsEnable;
  this.smtpAuth = smtpAuth;
  this.transportProtocol = transportProtocol;
  this.smtpPort = smtpPort;
 }
 
 /**
  * @param mailTitle 메일 제목을 Set을 합니다.
  */
 public void setMailTitle(String mailTitle) {
  this.mailTitle = mailTitle;
 }
 
 /**
  * @param mailContent 메일 내용을 Set합니다.
  */
 public void setMailContent(String mailContent) {
  this.mailContent = mailContent;
 }
 
 /**
  * @param revUserMails 메일을 보낼 이메일 주소 리스트를 Set합니다.
  */
 public void setRevUserMails(List<String> revUserMails) {
  this.revUserMails = revUserMails;
 }
 
 /**
  * @param revEmail 보낼 이메일 주소를 리스트에 담습니다.
  */
 public void setEmail(String revEmail) {
  revUserMails.add(revEmail);
 }
 
 /**
  * 이메일을 보냅니다.
  */
 public void send() {
  checkSettings();

  URLName urln = getUrlName();
  Properties props = getProperties();
  Authenticator auth = getAutheticator();
  Session session = getSession(props, auth);
  SMTPSSLTransport trans = getSmtpSslTransport(urln, session);

  try {
   MimeMessage message = getMimeMessage(session);
   SMTPSSLTransport.send(message);
   trans.close();
  }
  catch (MessagingException e) {
   e.printStackTrace();
  }
 }

 /**
  * @param session session을 사용합니다.
  * @return MimeMessage를 반환합니다.
  * @throws MessagingException
  */
 private MimeMessage getMimeMessage(Session session) throws MessagingException {
  //메시지 설정
  MimeMessage message = new MimeMessage(session);
  message.setSubject(mailTitle);
  message.setText(mailContent);

 

  //받을 사람 설정
  InternetAddress[] addressTo = new InternetAddress[revUserMails.size()];
  for(int i = 0; i < revUserMails.size() ; i++){
   addressTo[i] = new InternetAddress(revUserMails.get(i));
  }
  message.setRecipients(Message.RecipientType.TO, addressTo);
  return message;
 }

 /**
  * @param urln URLName을 사용합니다.
  * @param session Session을 사용합니다.
  * @return SMTPSSLTransport를 반환합니다.
  */
 private SMTPSSLTransport getSmtpSslTransport(URLName urln, Session session) {
  SMTPSSLTransport trans = new SMTPSSLTransport(session, urln);

  trans.setStartTLS(true);
  return trans;
 }

 /**
  * @param props Properties로 SMTP 설정 정보를 받습니다.
  * @param auth Authenticator로 계정 정보를 받습니다.
  * @return Session을 반환합니다.
  */
 private Session getSession(Properties props, Authenticator auth) {
  Session session = Session.getDefaultInstance(props, auth);
  return session;
 }

 /**
  * @return Authenticator를 반환합니다.
  */
 private Authenticator getAutheticator() {
  Authenticator auth = new SMTPAuthenticator();
  Security.addProvider(new Provider());
  return auth;
 }

 /**
  * @return URLName을 반환합니다.
  */
 private URLName getUrlName() {
  URLName urln = new URLName(transportProtocol, smtpHost, smtpPort, "", masterId, masterPwd);
  return urln;
 }

 /**
  * @return SMTP 설정 내용(Properties)을 반환합니다.
  */
 private Properties getProperties() {
  Properties props = new Properties();
  props.put("mail.transport.protocol", transportProtocol);
  props.put("mail.smtp.starttls.enable",smtpStarttlsEnable);
  props.put("mail.smtp.host", smtpHost);
  props.put("mail.smtp.auth", smtpAuth);
  props.put("mail.smtp.port", String.valueOf(smtpPort));
  return props;
 }

 /**
  * 필수 요소가 설정 됐는지 확인합니다.
  */
 private void checkSettings() {
  if(masterId == null || masterPwd == null)
   throw new IllegalStateException("Invalid mail account.");
  if(revUserMails.size() == 0)
   throw new IllegalStateException("No recipients.");
 }

 private class SMTPAuthenticator extends Authenticator {

  public PasswordAuthentication getPasswordAuthentication() {
   String userId = masterId;
   String userPwd = masterPwd;
   return new PasswordAuthentication(userId, userPwd);
  }
 }
}

구현한걸 사용하여 보자.

 

package kr.co.ui2.mail.smtps;

import java.util.ArrayList;
import java.util.List;

public class Mailtest {
 public void senderMail(){
  MailSender ms = new MailSender();
  String id = "master@test.com";
  String pwd = "test";


  String title = "Mail Test";
  String text = "메일테스트";
 

  String emailUser1 = "test@gmail.com";
  String emailUser2 = "test@emaps.com";
  List<String> userList= new ArrayList<String>();
 
  userList.add(emailUser1);
  userList.add(emailUser2);
  ms.setAccount(id, pwd, "smtp.test.com", "true", "true", "smtp", 457);
  ms.setMailTitle(title);
  ms.setMailContent(text);
  ms.setEmail(emailUser1);
  ms.setRevUserMails(userList);
  ms.send();
 } 
 
 public static void main(String[] args) {
  Mailtest m = new Mailtest();
  m.senderMail();
 }
}

'Java > Util' 카테고리의 다른 글

Java Date 관련 유틸  (0) 2008.07.26
java mail HTML메일 발송  (0) 2008.07.26
JAXP - SAX와 DOM 파서를 이용한 XML문서 파싱  (0) 2008.07.26
캐릭터셋 확인  (0) 2008.07.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함