JavaMail API를 이용하여 메일을 발송하는 예제의 대부분은 SMTP 서버를 통해서 단순하게 메일을 보내는 것이다.
하지만 사내에서 SMTP를 사용하여 메일을 전송하거나, 별도의 서비스를 위해서 SMTP 서버를 사용하는 경우에는 SMTP 서버에 계정을 이용하여 발송하기 때문에 계정에 대한 패스워드가 존재한다. 또한 SMTP 서버를 패스워드 없이 오픈해 놓으면 스팸 메일을 발송하는 원인이 될 수 있다.
그래서 SMTP 서버로 메일을 발송할 때 보안설정이 되어 있는 형태로의 자바메일 발송예제가 필요한 것이다.
다음 두 개의 소스 코드가 존재한다.
[MyAuthenticator.java]
package net.wiseant.mail;
import javax.mail.Authenticator;
/**
* @author SangHyup LEE
*
*/
public class MyAuthenticator extends Authenticator {
private String id;
private String pw;
public MyAuthenticator(String id, String pw) {
this.id = id;
this.pw = pw;
}
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(id, pw);
}
}
소스 코드에서 보는 바와 같이 java mail API의 Authenticator 클래스를 extends 하여 구현한 예제이다. 간략하게 생성자의 인자로 id와 password를 받는다. 그러면 해당 서버의 아이디와 패스워드로 인증된 객체를 생성하는 것이다.
[SMTPTest.java]
/**
*
*/
package net.wiseant.mail;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* @author SangHyup LEE
*
*/
public class SMTPTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String host = "mail.wiseant.net";//smtp 서버
String subject = "메일제목";
String content = "메일내용";
String from = "wiseant@wiseant.net"; //보내는 사람
String to = "korcslewis@gmail.com";
try{
// 프로퍼티 값 인스턴스 생성과 기본세션(SMTP 서버 호스트 지정)
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
MyAuthenticator auth = new MyAuthenticator("wiseant@wiseant.net", "password");
Session mailSession = Session.getDefaultInstance(props, auth);
// sess.getPasswordAuthentication(host);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));//보내는 사람 설정
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);//받는 사람설정
msg.setSubject(subject);// 제목 설정
msg.setSentDate(new java.util.Date());// 보내는 날짜 설정
msg.setContent(content,"text/html;charset=euc-kr"); // 내영 설정 (HTML 형식)
Transport.send(msg); // 메일 보내기
System.out.println("메일 발송을 완료하였습니다.");
} catch ( MessagingException ex ) {
System.out.println("mail send error : " + ex.getMessage());
} catch ( Exception e ) {
System.out.println("error : " + e.getMessage());
}
}
}
SMTPTest.java 코드는 SMTP 서버의 인증후, 실제 메일을 발송하는 예제이다. Java Mail API를 사용하여 보내는 예제와 거의 동일하다. 다만 MyAuthenticator 클래스의 인스턴스를 생성하여 보내고자 하는 SMTP 서버로부터 보안 설정을 확인 후, 수행하는 것이 다를 뿐이다.
댓글 없음:
댓글 쓰기