CAFE

Java SE

자바 메일 컨텐츠 한글 깨짐 문제

작성자황정식|작성시간11.11.30|조회수2,094 목록 댓글 0

==== MailManager.java ====

package ecg.util;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class MailManager
{
  // 첨부될 실제 파일명이 저장된 리스트.
  List<String> realFileNameList = new ArrayList<String>();
 
 private static MailManager singleton;
  
  
 private MailManager(){}
 
 /**
  * 싱글톤 객체 생성
  *
  * @return 없음
  */
 public static MailManager getInstance()
 {
  if(singleton == null)
  {
   singleton = new MailManager();
  }
  
  return singleton;
 }
 
 public void doMailSendSimple(Map<String, String> mailDataMap) throws Exception
 {
  
  String receiver = mailDataMap.get("email");
  String sender   = "admin@ip-navi.or.kr";
  String subject  = mailDataMap.get("subject");
  String contentsGubun = mailDataMap.get("contentsGubun");
  
  // 메일을 보낼 SMTP서버와 프로그램이름 설정
  String mailhost = "203.2xx,xxx,xxx";
  String mailer   = "JSP Mail";
  
  String contents = this.makeMailContents(mailDataMap, contentsGubun); // 메일 컨텐츠 생성.
  //contents = new String(contents.getBytes(),"EUC-KR");
  
  try{
    Properties props = System.getProperties();
       props.put("mail.smtp.host", mailhost);
       Session session = Session.getDefaultInstance(props, null);

       // 메일을 보낼 Message클래스를 생성한다.
       Message msg = new MimeMessage(session);

       // 메일 구성요소 설정
       msg.setFrom(new InternetAddress(sender,"IP 내비게이션","EUC-KR")); // 발신인의 이름을 한글로 표시할 수 있다.
       msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiver, false));
       msg.setSubject(subject);
       msg.setContent(contents, "text/html; charset=EUC-KR");
       msg.setSentDate(new Date());

     
       msg.setText(contents);
       msg.setHeader("Content-Type", "text/html; charset=EUC-KR");
       msg.setHeader("X-Mailer", mailer);

       // 메일 전송
       Transport.send(msg);
  }catch(MessagingException e){
   System.out.println("이메일 발송 에러!!");
  }catch(Exception ex){
   System.out.println("에러!!");
  }
  
  
 }
 
 
 private String makeMailContents(Map<String,String> mailData, String contentsGubun)
 {
  String mailContents = "";
  
  if(contentsGubun.equals("tempPasswd"))
  {
   mailContents = this.makeMailContentsTempPasswd(mailData);
  }
  return mailContents;
 }
 
 private String makeMailContentsTempPasswd(Map<String,String> mailData)
 {
  StringBuilder builder = new StringBuilder();
  
  builder.append("<h2>수출기업 지재권분쟁 지원시스템 IP Navigation</h2>").append("<br/><br/><br/>")
    .append("<span style='color: blue; font-weight:bold;'>").append(mailData.get("name")).append("</span>").append("님의 임시 비밀번호를 아래와 같이 알려드리오니<br/>")
    .append("임시 비밀번호를 이용하여 로그인 하신후 새로운 비밀번호로 바꾸어 주시기 바랍니다.<br/><br/>")
    .append("임시비밀번호: ").append("<span style='color: blue; font-weight:bold;'>").append(mailData.get("tempPasswd")).append("</span>").append("<br/>")
    .append("패스워드 변경 URL: <a href='http://www.ip-navi.or.kr' target='_blank'>http://www.ip-navi.or.kr</a>").append("<br/>");
  
  return builder.toString();
 }
}

--> 운영서버가 UTF-8 기반이라서 UTF-8로 인코딩을 하였으니, 메일 컨텐츠부분의 한글이 깨졌다. getBytes() 메서드를 사용하여 인코딩을 한후에도 여전히 깨져서 결국 모든 캐릭터셋을 EUC-KR로 바꾸고 나니, html 컨텐츠에 meta태그의 캐릭터셋을 굳이 지정하지 않아도 정상적으로 한글이 표시가 되었다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼