728x90
[JAVA] [javamail] JAVA를 이용한 메일 보내기
=== 추가 ===
보안접속이 필요하지 않은 메일(PlainMailHandler)과 보안접속이 필요한 메일(SecureMailHandler)로 구분하여 처리
PlainMailHandler - 사내 메일 테스트 완료
SecureMailHandler - 네이버메일, G메일 테스트 완료
Javamail의 Properties 설정용 정보 => http://www.websina.com/bugzero/kb/javamail-properties.html
메일전송용 프로토콜은 SMTP이고, 메일 서버에서 메일을 가져오는 프로토콜은 POP과 IMAP로 구분된다.
POP은 메일서버에서 메일을 가져오면서 해당메일을 삭제하고, IMAP은 메일서버에서 메일을 가져오기만 한다.
IMAP은 모바일과 일반 데스크탑 연동을 위해 사용할 수 있다.
==========
일단 메일을 보내기 위해서는 SMTP 를 구현해야 한다.
일단 오라클에서 제공하는 API를 이용하면 간단하게 구현이 가능하다.
JavaMail API 다운로드 : http://www.oracle.com/technetwork/java/index-138643.html
보안접속이 필요하지 않은 경우 다음과 같이 API를 이용해서 구현이 가능하다.
==== 테스트 예제 ===
package sdk.mail;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
/**
* 기본적인 메일 전송
* UTF-8로 메일을 전송 하므로 한글도 처리 가능
*
* @author sdk
*
*/
public class PlainMail {
private String mailServer = null; // E-MAIL 서버 주소
private Message message = null; // 보내는 메일 메시지
private String sender = null; // 보내는 사람 이메일 주소
private String senderNmae = null; // 보내는 사람 표시 이름
private String subject = null; // 제목
private String content = null; // 본문
private String receiver = null; // 받는 사람 리스트
private Address senderAddress = null; // 보내는 사람 주소
private Address[] receiverAddress = null; // 받는 사람 주소
public PlainMail() {}
public PlainMail(String mailServer){
setMailServer(mailServer);
}
public void SendMail() throws UnsupportedEncodingException, MessagingException
{
if(sender == null || subject == null || content == null || receiver == null)
throw new NullPointerException("sender, subject, content, receiver is null.");
initializeMailServer();
initializeSender();
initializeReceiver();
Send();
}
/**
* 메일 서버 초기화
* Message 객체 생성
*
*/
private void initializeMailServer(){
Properties properties = new Properties();
properties.put("mail.smtp.host", mailServer);
Session s = Session.getDefaultInstance(properties);
message = new MimeMessage(s);
}
/**
* 보내는 사람 초기화
*
* @throws UnsupportedEncodingException 표시 이름이 인식할 수 없는 문자(Base 64 기준)일때 발생
*/
private void initializeSender() throws UnsupportedEncodingException {
if(senderNmae == null) // 보내는 사람 표시 이름을 초기화 하지 않으면 메일주소로 초기화
senderNmae = sender;
senderAddress = new InternetAddress(sender, MimeUtility.encodeText(senderNmae, "UTF-8", "B")); // 표시 이름은 인코딩해서 표현
}
/**
* 받는 사람 초기화
*
* @throws AddressException 받는 사람이 인식 할 수 없는 이름일 때 발생
*/
private void initializeReceiver() throws AddressException {
ArrayList<String> receiverList = new ArrayList<String>();
StringTokenizer stMailAddress = new StringTokenizer(receiver, ";");
while (stMailAddress.hasMoreTokens()) {
receiverList.add(stMailAddress.nextToken());
}
receiverAddress = new Address[receiverList.size()];
for (int i = 0; i < receiverList.size(); i++) {
receiverAddress[i] = new InternetAddress(receiverList.get(i));
}
}
/**
* 메일 전송
*
* @throws MessagingException 메시지 초기화중 오류 발생
* @throws UnsupportedEncodingException 메일 제목이 인식할 수 없는 문자일 때 발생
*/
private void Send() throws MessagingException, UnsupportedEncodingException{
message.setHeader("content-type", "text/html;charset=UTF-8");
message.setFrom(senderAddress);
message.setRecipients(Message.RecipientType.TO, receiverAddress); // 받는 사람 타입 (TO, CC, BCC)
message.setSubject(MimeUtility.encodeText(subject, "UTF-8", "B"));
message.setContent(content, "text/html;charset=UTF-8");
message.setSentDate(new java.util.Date());
Transport.send(message);
}
/**
* 메일 서버
*
* @param mailServer
*/
public void setMailServer(String mailServer){
this.mailServer = mailServer;
}
/**
* 보내는 사람 주소
*
* @param sender
*/
public void setSender(String sender){
this.sender = sender;
}
/**
* 보내는 사람 표시 이름
*
* @param senderName
*/
public void setSenderName(String senderName){
this.senderNmae = senderName;
}
/**
* 메일 제목
*
* @param subject
*/
public void setSubject(String subject){
this.subject = subject;
}
/**
* 메일 내용
*
* @param content
*/
public void setContent(String content){
this.content = content;
}
/**
* 받는 사람 리스트
* 세미콜론(';')으로 구분
*
* @param receiver
*/
public void setReceiver(String receiver){
this.receiver = receiver;
}
public static void main(String[] args){
PlainMail mail = new PlainMail();
mail.setMailServer("메일 서버 주소");
mail.setSender("보내는 사람");
mail.setSenderName("테스터");
mail.setReceiver("받는 사람");
mail.setSubject("제목 - 자바메일 테스트");
mail.setContent("자바메일 테스트용 메일입니다.\nThis is javamail test.\n2010-12-13");
try {
mail.SendMail();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
728x90
'Development > Java' 카테고리의 다른 글
Multicast Programming. 멀티캐스트 프로그래밍. (0) | 2019.06.16 |
---|---|
Java mail. 파일첨부하기. (0) | 2019.06.16 |
[Eclipse] AnyEdit 플러그인 설치 방법 (0) | 2019.06.16 |
[Eclipse] 어느날 갑자기.... Tomcat Server start error. (0) | 2019.06.16 |
java Math 사용법~ (0) | 2019.06.14 |
댓글