반응형

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



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


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



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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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" 로 지정하는것이다.



출처: https://fruitdev.tistory.com/27 [과일가게 개발자]

반응형

'JAVA' 카테고리의 다른 글

접근제어자 범위  (0) 2021.04.09
@Scheduled 쉽게 사용하기  (0) 2019.03.07
파일 업로드 목록, 다운로드  (0) 2019.02.11
JAVA 업로드 된 파일 삭제하기  (0) 2019.02.11
파일이름을 시간으로 변경하여 저장  (0) 2019.01.23

+ Recent posts