잘 작동하던 이메일이 언제부터인가 갑자기 내용이 않나오고 이메일 소스가 그대로 노출되는 현상이 발생하였습니다.

오류 이메일 본문

주가알리미 사이트에서 제로보드 XE의 Mail.class.php클래스를 이용해서 이메일 보내고 있는데 갑자기 이메일 소스가 출력되는 괴이한 현상이 발생하여 찾다찾다 이제야 원인을 발견하고 조치를 취했습니다.

원인은 다름아닌 줄바꿈 문자가 “\n” 이 아닌 “\r\n”으로 들어가서 입니다.  이 부분이 어디 있냐면 Mail.class.php 파일에 send() 함수에 있습니다.

	function send()
	{
		if($this->Mailer == "mail")
		{
			$boundary = '----==' . uniqid(rand(), TRUE);
			$this->eol = $GLOBALS['_qmail_compatibility'] == "Y" ? "\n" : "\r\n";
			$this->header = "Content-Type: multipart/alternative;" . $this->eol . "\tboundary=\"" . $boundary . "\"" . $this->eol . $this->eol;
			$this->body = sprintf(
				"--%s" . $this->eol .
				"Content-Type: text/plain; charset=utf-8; format=flowed" . $this->eol .
				"Content-Transfer-Encoding: base64" . $this->eol .
				"Content-Disposition: inline" . $this->eol . $this->eol .

위에 보면 $GLOBALS[‘_qmail_compatibility’]이 Y냐 아니냐에 따라서 줄바꿈 문자를 지정하는데 이상하게 “\r\n” 으로 지정되면 줄바꿈 문자가 중복해서 2번 들어가는 문제가 발생합니다.
그래서 이메일 내용에 줄바꿈이 두번 들어가면서 이메일 클라이언트나 웹메일에서 해석을 못하고 걍 소스를 그대로 보여주는 것 같습니다.

제로보드 환경 속에서가 아니라 그냥 클래스파일만 include해서 작업하니 이런 자잘한 설정에서 삑사리나네요. 이거 찾기 정말 힘들었습니다.