/* 메일 전송 */
public static void sendMail(String mail, String htmlContent, String ttl) throws Exception {
String host = "";
String useraddr = "";
String userpwd = "";
/* IMAP/SMTP 설정 */
Properties props = new Properties();
/* 호스트, 계정 비번 설정 */
host = "smtp.gmail.com";
useraddr = "아이디@gmail.com";
userpwd = "...";
/* Gmail 앱 비밀번호 : ... */
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
final String username = useraddr; // 계정
final String password = userpwd; // 비밀번호
// mailForm에 따른 메일 설정
/* Session 생성 */
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
String userId = username;
String userPw = password;
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(userId, userPw);
}
});
/* Message 설정 */
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(useraddr, MimeUtility.encodeText("안녕", "UTF-8", "B")));
message.setSender(new InternetAddress(useraddr)); // 발송인
message.setSubject(ttl); // 제목
session.setDebug(true); // 디버깅 여부
/* 내용 설정 */
String htmlContents = StringUtil.unEscape(htmlContent);
/* 한 명씩 전달하는 경우 */
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail));
Multipart mp = new MimeMultipart();
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(htmlContents, "text/html;charset=UTF-8"); // 내용
mp.addBodyPart(mbp1);
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
message.setContent(mp);
Transport.send(message);
}
1. 2단계 보안 인증을 완료하면 아래에 "앱 비밀번호" 란이 추가된 걸 볼 수 있다.
2. 클릭 후 앱 고유 비밀번호를 입력 받아 로그인 비밀번호로 활용하면 해당 앱만 사용할 수 있다.