
사용자 입력 → Member 객체로 구성 → DB insert → 이메일 전송 → 완료 메시지 출력
유저가 join하면 MailSender의 sendHTML()사용하여 축하메일 전송!
public class MailSender {
String acount_user = "lucyhj80@gmail.com"; // 보내는 사람 이메일 계정
String app_pwd = "Google에서 발급받은 앱 비밀번호";
Session session; // 메일 세션 객체
public MailSender() {
// SMTP 설정을 위한 속성 지정
Properties props = new Properties();
props.put("mail.smtp.auth", "true"); // 인증 필요
props.put("mail.smtp.starttls.enable", "true"); // TLS 보안 연결 사용
props.put("mail.smtp.host", "smtp.gmail.com"); // SMTP 서버 주소 (구글)
props.put("mail.smtp.port", "587"); // SMTP 포트 번호
// 메일 세션 생성 (인증 포함)
session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(acount_user, app_pwd);
}
});
}
// 1️⃣ 일반 텍스트 메일 전송
public void send(String targetMail, String title, String content) throws EmailException {
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(acount_user)); // 보내는 사람
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(targetMail)); // 받는 사람
message.setSubject(title); // 메일 제목
message.setText(content); // 메일 본문 (텍스트)
// 메일 전송
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
throw new EmailException("메일 발송 실패", e);
} catch (MessagingException e) {
e.printStackTrace();
throw new EmailException("메일 발송 실패", e);
}
}
// 2️⃣ HTML 형식의 메일 전송
public void sendHtml(String targetMail, String title, String content) throws EmailException {
FileInputStream fis = null;
BufferedReader buffr = null;
StringBuffer sb = new StringBuffer();
try {
// HTML 메일 템플릿 파일 읽기
fis = new FileInputStream("C:/Users/a/OneDrive/문서/lecture_workspace/back_workspace/java_workspace2/shop/data/mailform.html");
buffr = new BufferedReader(new InputStreamReader(fis));
while (true) {
String tag = buffr.readLine(); // 한 줄씩 읽기
if (tag == null) break;
sb.append(tag); // HTML 내용 누적
}
} catch (FileNotFoundException e) {
e.printStackTrace(); // 템플릿 파일 못 찾은 경우
} catch (IOException e) {
e.printStackTrace(); // 파일 읽기 오류
} finally {
// 리소스 해제
if (buffr != null) {
try {
buffr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(acount_user)); // 보내는 사람
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(targetMail)); // 받는 사람
message.setSubject(title); // 메일 제목
// HTML 형식 본문 설정
message.setContent(sb.toString(), "text/html; charset=utf-8");
// 메일 전송
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
throw new EmailException("메일 발송 실패", e);
} catch (MessagingException e) {
e.printStackTrace();
throw new EmailException("메일 발송 실패", e);
}
}
}
public void join() {
// 1. 사용자 입력값을 바탕으로 Member 객체 생성 및 데이터 설정
Member member = new Member();
member.setId(t_id.getText()); // 입력된 아이디
member.setPwd(new String(t_pwd.getPassword())); // 입력된 비밀번호 (PasswordField → String 변환)
member.setName(t_name.getText()); // 입력된 이름
member.setEmail(t_email.getText()); // 입력된 이메일 주소 (※ 실제 이메일 주소 기입 필요)
try {
// 2. DAO에게 회원정보 insert 지시 → DB에 저장
memberDAO.insert(member); // insert 실패 시 MemberException 발생 가능
// 3. 이메일 전송 (HTML 양식 사용)
// MailSender 클래스의 sendHtml() 메서드 호출
mailSender.sendHtml(
member.getEmail(), // 수신자 이메일
"회원가입 축하드립니다", // 제목
"저희 회원이 되어 주셔서 감사합니다." // 내용 (단순 문자열, HTML 템플릿 파일이 실제로 전송됨)
);
// 4. 완료 메시지 출력 (JOptionPane 사용)
JOptionPane.showMessageDialog(this, "회원가입 완료");
} catch (MemberException | EmailException e) {
// 5. 예외 처리: DB insert 실패 또는 메일 전송 실패
e.printStackTrace(); // 콘솔에 에러 로그 출력
}
}