Reminiscence

고객한테 전화가 왔다..

우리쪽에서 정기적으로 발송해 주는 메일이 다 깨져서 보이지가 않는다는....

php에서 mail함수를 이용해 발송하는 소스인데..

특별한 문제는 없어보였다..

다만, 해당 메일을 Daum이나, Paran에서 받으면 무조건 메일 내용이 안보이거나 깨져버린다는거였다..

-_- 메일 내용 인코딩에 문제가 있나하고.. 뒤져봐도 해결은 안되네..

도대체 뭐가 문제일까 .. 케릭터 셋도 바꿔보고 이것저것 뒤적뒤적 해봤는데 완전 삽질...

내 사수가 만들어 놓은 소스 -_- 참.. 간략하게 만들었더라.. ㅋㅋ

알고보니 함수 하나 더 써주면 쉽게 해결될 것을 완전 삽질한거다..

단 한가지!!!
chunk_split

(PHP 3>= 3.0.6, PHP 4 , PHP 5)

chunk_split -- 문자열을 작은 조각으로 나눕니다.

설명

string chunk_split ( string body [, int chunklen [, string end]])

문자열을 작은 조각으로 나눕니다. base64_encode 출력을 RFC 2045 의미에 맞게 변환할 때 쓸 수 있습니다. 모든 chunklen 문자마다 (기본값 76) end(기본값 "\r\n")를 추가합니다. 원 문자열은 변경하지 않고, 새로운 문자열을 반환합니다.

예 1. chunk_split() 예제

<?php
// RFC 2045 의의에 맞게 $data를 형식화
$new_string = chunk_split(base64_encode($data
));
?>

참고: str_split(), explode(), split(), wordwrap(), RFC 2045.



위 내용 그대로다.. base64로 encoding 한 데이터를 RFC2045 에 맞도록 변환해주는 기능을 한다.
잘게 쪼개는 기능도 있지만, RFC 형식에 맞도록 컨버팅을 해주므로, 올바른 데이터가 전달 될 수 있는것이다.

실제 내가 테스트로 발송했던 메일들의 인코딩 된 내용들을 확인해 보니, 어째서인지는 모르겠지만 들어가서는 안되는 특수문자들이 몇가지 들어가 있었다.. Base64에서는 지정된 몇개의 특수문자 외에 다른 특수문자는 들어가면 안되었던것이다..;;

이걸 모르는 내 무지함이란.. 크..
아무튼.. 여자저차 해서 Chunk_split이라는 명령어를 통해 아래처럼 구성해서 데이터 넣어보니 메일들이 정상적으로 수신될 수 있게 조치했으므로, 문제 해결~?

chunk_split(base64_encode($content), 76, "\n")

그나저나 우리 사내 메일 시스템하고 naver는 -_- 그냥 쓰레기 값은 무시하는것인가.. 흠..
좋은거야? 나쁜거야?
신고

댓글 0개가 달렸습니다.