본문 바로가기

Language/Java / JSP

[Java] SMTP 메일전송 한글깨짐 해결

반응형


지난번에 gmail smtp 서버를 이용한 메일전송을 포스팅 한적이 있다.


[Java] Gmail SMTP를 이용한 메일 보내기 [보기]



종종 smtp를 이용할때 한글이 깨지는 경우가 있는데 한글깨짐이 발생하는곳은 3가지 정도이다.


1. 발신자 이름 - 예) 홍길동<test@gmail.com>
2. 메일 제목
3. 본문 내용



이중에서 메일 제목과 본문 내용은 쉽게 해결이 가능한데,
발신자 이름의 경우 해결방법을 못 찾아서 아예 사용하지 않거나, 영어로 사용하는 사람도 봤다.

(사실 꼬꼬마 시절에 내가 그랬다)

아마도 쉽게 찾지 못하는 사람은 제목, 본문과 동일하게 캐릭터셋을 사용 하려다보니 문제 해결을 못한게 아닌가 싶다.

일단 한글을 해결할 수 있는 소스코드를 잠깐 살펴보자. 전체 소스코드는 지난번 포스팅 내용을 참고하면 된다.

MimeMessage msg = new MimeMessage(session);

	String charSet = "UTF-8" ;

	try{
		//편지보낸시간
		msg.setSentDate(new Date());

		String fromName = "홍길동" ;
		InternetAddress from = new InternetAddress() ;

		// 발시자 이름 : 홍길동<test@gmail.com>
		try{
			from = new InternetAddress(new String(fromName.getBytes(charSet), "8859_1") + "<test@gmail.com>");
		}catch(UnsupportedEncodingException uee){
			uee.printStackTrace();
		}
		// 이메일 발신자
		msg.setFrom(from);


		// 이메일 수신자
		InternetAddress to = new InternetAddress("test@naver.com");
		msg.setRecipient(Message.RecipientType.TO, to);

		// 이메일 제목
		msg.setSubject("메일 전송 테스트", charSet);

		// 이메일 내용
		msg.setText("내용", charSet);

		// 이메일 헤더
		msg.setHeader("content-Type", "text/html");

		//메일보내기
		javax.mail.Transport.send(msg);

	}catch (AddressException addr_e) {
		addr_e.printStackTrace();
	}catch (MessagingException msg_e) {
		msg_e.printStackTrace();
	}


코드를 보면 알겠지만 결국은 발신자 이름의 언어셋을 "UTF-8" 로 지정하는것이 아닌 "8859_1" 로 지정하는것이다.

나처럼 꼬꼬마 시절을 겪고 게신 분들께 도움이 되었으면 한다. (물론 구글링 하면 다 나옴 ...)