Gmail 계정 사용해서 이메일 보내는 프로그램
원래는 Spring 22장 Email을 보고 코딩하고 있었는데 잘 안되더군요. 그래서 Gmail 설정에 가서 도움말을 봤더니 SSL 인증을 사용하는데 그와 관련된 Spring 코드를 아직 찾아보지 않았습니다. MailSender 에서 SSL 설정하는 메소드가 있어야 할 것 같은데 일단 JavaMail API로 어떻게 돌아가는지 확인해 봤습니다.
JavaMail API 에서 SMTPSSLTransport 클래스가 MailSender의 하위 클래스인 JavaMailSenderImpl에 대응하는 클래스인데 특징은 이름에서 알 수 있듯이 SSL을 지원하는 클래스인 듯 하네요.
URLName urln = new URLName("smtp", "smtp.gmail.com", 587, "", "", "");
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
Authenticator auth = new SMTPAuthenticator();
Security.addProvider(new Provider());
Session session = Session.getDefaultInstance(props, auth);
SMTPSSLTransport trans = new SMTPSSLTransport(session, urln);
trans.setStartTLS(true);
Message message = new MimeMessage(session);
try {
message.setSubject("hi i'm keesun");
message.setText("hehehehe");
InternetAddress[] addressTo = new InternetAddress[1];
addressTo[0] = new InternetAddress(memberInfo.getEmail());
message.setRecipients(Message.RecipientType.TO, addressTo);
trans.send(message);
trans.close();
}
catch (MessagingException e) {
e.printStackTrace();
}
}
private class SMTPAuthenticator extends javax.mail.Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "Gmail 계정";
String password = "Gmail 비번";
return new PasswordAuthentication(username, password);
}
}
코드를 조금만 바꾸면 모든 회원에게 공지메일을 보낼 수도 있습니다.ㅋㅋ;;
코드를 조금 더 바꾸면 간단하게 사용할 수 있게 Util 클래스로 만들 수 있을 것 같습니다.
근데 Naver는 우수회원(네이버 메일 자주 쓰는 사람)만 smtp 사용할 수 있고 DAUM은 아예 smtp 를 지원하는지 안하는지도 모르겠고.. 너무들해열!!! 이메일이 아니라 FTP가 되가고 있는 국내 이메일 서비스의 경향인가;;