1. 의존성 추가
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
2. 샘플코드
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailSender {
// 구글 이메일
static final String user_email= "XXXXX@gmail.com";
// 구글 비번
static final String user_pw = "XXXXX";
static final String smtp_host = "smtp.gmail.com";
static final int smtp_port = 465; // TLS : 587, SSL : 465
public static void Send() throws Exception {
Properties props = System.getProperties();
props.put("mail.smtp.host", smtp_host);
props.put("mail.smtp.port", smtp_port);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.trust", smtp_host);
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user_email, user_pw);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(user_email));
// 받는 이메일
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse("XXXXX@gmail.com, XXXXX@naver.com")
);
// 제목
message.setSubject("테스트 메일입니다.");
// 내용
message.setText("이것은 테스트 메일입니다. \n\n 잘 갔나요?");
// 발송
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
}
위 코드를 실행했더니
Application-specific password required
오류가 발생한다.
구글링 해보니 2차인증 설정시 발생하는 오류라고 함
해결방법은 구글 보안탭에서 앱 비밀번호를 생성해서 사용하면 된다.
3. 앱 비밀번호 만들고 사용하기
2) 보안 선택
3) 2단계 인증 선택
4) 맨밑에 앱 비밀번호 선택
5) 앱 선택 : 메일, 기기 선택 : windows 컴퓨터, 생성 클릭 하면 16자리 비밀번호가 생성된다.
6) 생성된 비밀번호를 user_pw 로 사용하면 메일 잘 발송된다.
끝