코드/PHP

[PHP]메일 보낸 사람 제목이나 메일주소가 나오지 않을때.

Yeah-Panda 2015. 6. 22. 16:18


mail($to, $subject, $msg, $headers) 로 메일을 발송해보면

보낸 사람이 메일이나 메일 제목이 있어야 할 부분에


root@어쩌고저쩌고.cafe24.com


가 뜨는 경우가 있다.

일단


$subject = $_POST['subject']; $qna_tit = '메일제목'; $u_name = '메일 보낸 사람'; $u_email = '메일 보낸 사람의 이메일주소'; $to = 'abc4@naver.com'; $charset = 'UTF-8'; $subject = "=?".$charset."?B?".base64_encode($qna_tit)."?="; $from = "=?".$charset."?B?".base64_encode($u_name)."?=<$u_email>\r\n"; $headers ='MIME-Version: 1.0'."\r\n"; $headers.='Content-type: text/html; charset=UTF-8'."\r\n"; $headers.='From: '.$from."\r\n"; mail($to, $subject, $qna_post, $headers);


이렇게 해결이 된다.

저기 $headers 값을 설정하는 부분에 빈칸을 주의해서 넣어야한다.

그리고 from 부분에 <$u_email> 저렇게 쌍따옴표 안에서 하나의 문자열로 묶어줘야한다. 문자열 연결자 '.' 로 연결하면 제목에서 깨진다 ( 아웃룩에서는 제대로 보이지만 , 웹메일에서 깨진다 )

PHP는 공백에 민감한거같다. 심지어 캐시 문제인지는 모르겠으나


$headers .="Content-type: text/html; charset=UTF-8"."\r\n";// 깨짐
$headers.="Content-type: text/html; charset=UTF-8"."\r\n"; //안 깨짐
$headers .= "Content-type: text/html; charset=UTF-8"."\r\n"; //안깨짐


라는 이런 말도 안되는 현상도 겪었다. 공백에 유의하자.

그리고 $from 이메일은 유효한 이메일 주소를 적어줘야한다.

안그럼 다시 보낸 사람 주소 텍스트가 깨져서 전달된다.

그리고 $charset='UTF-8'  대문자로 넣으라. 소문자 넣으면 깨진다.

별 시덥잖은거에 삽질 한참 동안 함.