2017년 2월 9일 목요일

php에서 메일제목 한글이 깨질때


php에서 한글인코딩을 보낼 경우 한글이깨지는 경우가 발생한다.



상황

- 홈페이지(php, linux, mysql)에서 메일(linux)을 보내는데 한글이 깨짐 

현상확인


#그림1
  (그림1 다음메일)


그렇다고 모두 그런것은 아니다.

#그림2
(그림2. 네이버 메일)


많이 쓰는 메일들에 대해서 테스트 해보았는데
(gmail, naver, daum or hanmail, nate 그리고 회사메일)
daum과 회사메일이 그림1과 같은 현상이 발생되었다.





그럼 원인에 대해서 생각해보자

1. 메일서버
2. 웹서버
3. DB
4. backend 언어
5. etc...


그럼 하나씩 짚고 넘어가보자

1. 메일서버 (x)
3. DB (x)
  - 기존 언어(asp, mysql) 홈페이지에서 메일(linux)을 보냈을때 정상적으로 발송됨

2. 웹서버의 문제
  - 리눅스서버 설정은 확인하고 조작해보기 힘드므로 마지막순위로 밀겠다

4. backend 언어(php)
- 남은건 이거 하나


해결

1. php한글깨짐을 검색해보면 관련 블로그가 많다



내용을 살펴보면 메일을 보낼때 헤더값으로 관련 정보를 넘겨준다.
넘겨줄때

$subject = "메일제목";

이럴경우

$subject = '=?UTF-8?B?'.base64_encode( "메일제목" ).'?=';

으로 utf-8로 메일을 보낸다는것을 명시해주면 된다.

기본적으로 메일을 보낼때 ASCII 문자열로 넘어가기때문에 인코딩에 대한 명시를 해줘야된다 한다.

이러한 형태로 인코딩을 적용되어 될 부분은 한글이 들어가야되는 부분(보내는이 이름, 받는이 이름) 들도 포함이다. 
그리고 내용은 하지말아야 한다.(해보니까 더 깨진다.. 그냥 보내야 정상임)
이부분에 대해선 더 확인해봐야될듯 하다.