WEB
이메일을 전송하려면 이메일 서버가 필요함
본인은 구글 이메일 서버를 사용함
구글 서버를 사용하려면 몇가지 단계가 있음
1. 구글 접속 후 계정 관리에 들어감
2. 2단계 인증 클릭
클릭 후 들어가서
앱 비밀 번호 클릭
사용하고 싶은 앱 이름을 작성하고 만들기를 클릭하면
16자리 비밀번호가 나옴
이메일 api 사용시 필요하기 때문에 복사
3. 라이브러리 추가 하기
사용되는 라이브러리는 `javax.mail`과 `activation-jaf`
javax.mail.jar : JavaMail API를 제공하여 이메일을 전송할 수 있게 해줌
activation-jaf1.1.1.jar : 이메일에 첨부파일을 추가하거나 다양한 데이터 타입을 처리할 수 있게 함
4. GoogleAuthentication 객체 생성
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
// GoogleAuthentication 클래스를 정의합니다. 이 클래스는 메일 서버 인증을 처리합니다.
public class GoogleAuthentication extends Authenticator {
// PasswordAuthentication 객체를 선언합니다.
PasswordAuthentication passAuth;
// 생성자 메서드입니다. GoogleAuthentication 객체가 생성될 때 호출됩니다.
public GoogleAuthentication() {
// 사용자 이메일 주소와 애플리케이션 비밀번호를 사용하여 PasswordAuthentication 객체를 초기화합니다.
// 이메일 주소와 비밀번호는 실제 값을 사용하는 것이 아니라 예시로 제공된 것입니다.
passAuth = new PasswordAuthentication("앱 비밀번호 발급 시 사용한 구글계정", "앱 비밀번호");
}
// 메일 서버와의 인증을 위한 PasswordAuthentication 객체를 반환하는 메서드입니다.
public PasswordAuthentication getPasswordAuthentication() {
// 생성자에서 설정한 이메일 주소와 비밀번호를 반환합니다.
return passAuth;
}
}
5. 메일 전송 서블릿 작성
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
@WebServlet("/sendMail")
public class MailSend extends HttpServlet {
private static final long serialVersionUID = 1L;
public MailSend() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 클라이언트로부터 전송된 요청의 인코딩을 설정합니다.
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// 인코딩 설정 중 오류 발생 시 예외를 출력합니다.
e.printStackTrace();
}
// 요청 파라미터에서 인증번호와 수신자 이메일을 가져옵니다.
String num = request.getParameter("num");
String receiver = request.getParameter("이메일");
System.out.println("receiver : "+receiver);
//String subject = request.getParameter("subject");
// 이메일 제목을 설정합니다.
String subject ="제목입니다.";
// 이메일 내용에 인증번호를 포함합니다.
String content = "인증번호" + num;
// 응답의 콘텐츠 타입을 설정하여 HTML 형식으로 설정합니다.
response.setContentType("text/html; charset=utf-8");
try {
// 이메일 서버의 속성을 설정합니다.
Properties p = System.getProperties(); // 서버 정보를 저장할 Properties 객체
// SMTP 서버의 속성을 설정합니다.
p.put("mail.smtp.starttls.enable", "true"); // STARTTLS를 사용하여 암호화된 연결을 설정합니다.
p.put("mail.smtp.host", "smtp.gmail.com"); // SMTP 서버 호스트 (Gmail)
p.put("mail.smtp.auth", "true"); // 인증을 사용합니다.
p.put("mail.smtp.port", "587"); // SMTP 포트 번호 (587은 TLS 포트)
// 인증 정보를 생성합니다.
Authenticator auth = new GoogleAuthentication(); // GoogleAuthentication 클래스에서 인증 정보 생성
// 메일 세션을 생성합니다.
Session s = Session.getInstance(p, auth); // 서버 속성과 인증 정보를 사용하여 Session 객체 생성
// 메일 메시지를 생성합니다.
Message m = new MimeMessage(s); // 생성된 Session을 사용하여 MimeMessage 객체 생성
// 수신자의 이메일 주소를 설정합니다.
Address receiver_address = new InternetAddress(receiver); // 수신자 이메일 주소
// 메일 전송에 필요한 설정을 진행합니다.
m.setHeader("content-type", "text/html;charset=utf-8"); // 메일의 내용 유형과 문자 인코딩 설정
m.addRecipient(Message.RecipientType.TO, receiver_address); // 수신자 추가
m.setSubject(subject); // 메일 제목 설정
m.setContent(content, "text/html;charset=utf-8"); // 메일 내용과 형식 설정
m.setSentDate(new Date()); // 메일 전송 날짜 설정
// 메일을 전송합니다.
Transport.send(m);
// 메일 전송 성공 시에 대한 메시지를 응답에 작성할 수 있습니다
} catch (Exception e) {
// 메일 전송 중 오류가 발생하면 예외를 출력합니다.
e.printStackTrace();
}
}
}
6. 결과 확인
야~ 호~
'javaboiii의 Web' 카테고리의 다른 글
포트원 결제 API - 2 (0) | 2024.09.28 |
---|---|
포트원 결제 API - 1 (0) | 2024.09.06 |
Web - 필터(Filter) (0) | 2024.09.05 |
Web - 안내창으로 사용자 경험 높이기 (0) | 2024.09.04 |
Web - M V C 작업 시 유의사항 (0) | 2024.09.03 |