회원가입 축하 메일 보내기

heeezni·2025년 6월 14일

Java GUI 프로젝트

목록 보기
18/20
post-thumbnail

사용자 입력 → 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);
		}
	}
}

View - Memberjoin.java 중 관련 코드

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(); // 콘솔에 에러 로그 출력
	}
}
profile
아이들의 가능성을 믿었던 마음 그대로, 이제는 나의 가능성을 믿고 나아가는 중입니다.🌱

0개의 댓글