티스토리 뷰
메일 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
- 마이바티스
- 마이바티스CamelCase
- camelcase
- SSL
- Letsencrypt wildcard auto renew
- Letsencrypt+nginx
- letsencrypt
- Letsencrypt wildcard
- Intellj들여쓰기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |