반응형
안녕하세요 개발자 Jindory입니다. 오늘은 Java로 메일을 발송하는 프로그램에 대해서 설명하고자 합니다. 프로그램 상에서 메일을 보내기 위해서는 SMTP(Simple Mail Transfer Protocol) 프로토콜를 이용해서 google 메일을 통해 email을 전송하는 프로그램을 만들어보고자 합니다.
프로그램은 Java를 활용하기 때문에 Java Mail 라이브러리를 사용하겠습니다.
1. SMTP란?
Simple Main Transfer Protocol의 약자로 TCP/IP 네트워크에서 전자 메일 전송을 위한 표준 프로토콜입니다. SMTP는 전자 메일 메시지를 보내고 받을 수 있는 기능을 제공합니다.
2. SMTP로 Java에서 메일 발송하기
1) Java mail 라이브러리 다운 및 import
https://mvnrepository.com/artifact/javax.mail/mail로 접근하여 저희는 1.4.7 version을 사용하도록 하겠습니다.
Maven 소스를 복사하여 java Spring의 pom.xml에 붙혀줍니다.
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
2) google계정에서 smtp 설정
- google 계정을 선택하여 계정관리로 이동
- 보안탭을 선택한 후 보안수준을 낮은 앱의 엑세스 설정으로 이동
- 보안수준이 낮은 앱 허용으로 전환(해당 부분을 변경하지 않으면 보안 문제로 인하여 프로그램에서 메일전송이 제한)
3) Java Program code 작성
1> 발신자 이메일 정보 입력
//발신자 이메일정보를 입력.
String email = "9495yjs@gmail.com";
String password ="password";
2> SMTP 프로토콜 설정
// SMTP 서버 정보를 설정.
Properties props = new Properties();
// 메일 프로토콜을 Simple Mail Transfer Protocol을 사용할것이기 때문에 smtp로 설정
props.setProperty("mail.transport.protocol", "smtp");
// 메일을 gmail로 발송할것이기 때문에 smtp.gmail.com으로 설정.
props.setProperty("mail.host","smtp.gmail.com");
// ID, Password에 대한 설정 필요
props.setProperty("mail.smtp.auth","true");
// port는 465
props.put("maile.smtp.port","465");
//SSL 사용일때
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.ssl.enable", "true");
// ID와 Password를 설정하고 seesion을 생성
Session session = Session.getInstance(props,new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email,password);
}
});
3> 이메일 내용 작성
try {
// 메일 메시지를 만들기 위한 클래스 생성
MimeMessage message = new MimeMessage(session);
// 송신자 설정
message.setFrom(getAddress(email));
// 수신자 설정
message.addRecipients(Message.RecipientType.TO, "yjs445566@naver.com");
// 메일 제목을 설정
message.setSubject("메일 발송 시스템 Test");
// 메일 내용을 설정을 위한 클래스 설정.
message.setContent(new MimeMultipart());
// 메일 내뇽을 위한 multipart 클래스를 받아온다.(위 new MimeMultipart()로 넣은 클래스)
Multipart mp = (Multipart) message.getContent();
// html 형식으로 본문을 작성해서 바운더리에 넣습니다.
mp.addBodyPart(getContents("<html><head></head><body>메일 발송 시스템 Test<br></body></html>"));
Transport.send(message);
}catch (Throwable e) {
e.printStackTrace();
}
// String으로 된 메일 주소를 Address 클래스로 변환
public Address getAddress(String email) throws AddressException {
return new InternetAddress(email);
}
// 메일의 본문 내용 설정
public BodyPart getContents(String html)throws MessagingException{
BodyPart mbp = new MimeBodyPart();
mbp.setContent(html,"text/html; charset=utf-8");
return mbp;
}
4> 전체 코드
package org.jindory.batch;
import org.jindory.domain.ApiKeyVO;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class emailProgram {
public void gmailSend() {
ApiKeyVO privateInfo = new ApiKeyVO();
//발신자 이메일정보를 입력.
String email = "9495yjs@gmail.com";
String password ="password";
// SMTP 서버 정보를 설정.
Properties props = new Properties();
// 메일 프로토콜을 Simple Mail Transfer Protocol을 사용할것이기 때문에 smtp로 설정
props.setProperty("mail.transport.protocol", "smtp");
// 메일을 gmail로 발송할것이기 때문에 smtp.gmail.com으로 설정.
props.setProperty("mail.host","smtp.gmail.com");
// ID, Password에 대한 설정 필요
props.setProperty("mail.smtp.auth","true");
// port는 465
props.put("maile.smtp.port","465");
//SSL 사용일때
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.ssl.enable", "true");
// ID와 Password를 설정하고 seesion을 생성
Session session = Session.getInstance(props,new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email,password);
}
});
try {
// 메일 메시지를 만들기 위한 클래스 생성
MimeMessage message = new MimeMessage(session);
// 송신자 설정
message.setFrom(getAddress(email));
// 수신자 설정
message.addRecipients(Message.RecipientType.TO, "yjs445566@naver.com");
// 메일 제목을 설정
message.setSubject("메일 발송 시스템 Test");
// 메일 내용을 설정을 위한 클래스 설정.
message.setContent(new MimeMultipart());
// 메일 내뇽을 위한 multipart 클래스를 받아온다.(위 new MimeMultipart()로 넣은 클래스)
Multipart mp = (Multipart) message.getContent();
// html 형식으로 본문을 작성해서 바운더리에 넣습니다.
mp.addBodyPart(getContents("<html><head></head><body>메일 발송 시스템 Test<br></body></html>"));
Transport.send(message);
}catch (Throwable e) {
e.printStackTrace();
}
}
// String으로 된 메일 주소를 Address 클래스로 변환
public Address getAddress(String email) throws AddressException {
return new InternetAddress(email);
}
// 메일의 본문 내용 설정
public BodyPart getContents(String html)throws MessagingException{
BodyPart mbp = new MimeBodyPart();
mbp.setContent(html,"text/html; charset=utf-8");
return mbp;
}
public static void main(String[] args) {
emailProgram p = new emailProgram();
p.gmailSend();
}
}
5> 메일 발송 확인
혹시라도 정정할 내용이나 추가적으로 필요하신 정보가 있다면 댓글 남겨주시면 감사하겠습니다.
오늘도 Jindory 블로그에 방문해주셔서 감사합니다.
[ 참조 ]
반응형
'개발 > Java' 카테고리의 다른 글
[Java] Java 나누기 사용시 주의사항 (0) | 2022.03.09 |
---|---|
[Java] Json Array 정렬 (0) | 2022.03.06 |
[Java] 자료형간의 형변환(문자형,정수형,실수형) (0) | 2022.03.03 |
[Java] Stream 활용하기[최종연산] (0) | 2022.02.25 |
[Java] Stream 활용하기[중간연산] (0) | 2022.02.25 |