최근에 문제가 발생했습니다. 즉, PHP의 메일 기능을 사용하여 UTF-8로 인코딩된 중국어 이메일을 보낼 때 제목은 깨져 보이지만 이메일 본문은 올바른 것입니다. 처음에는 페이지 인코딩 문제인 줄 알았으나, utf-8 페이지 인코딩에는 문제가 없다는 것을 알게 되었고, 오랫동안 원인을 찾아보니 드디어 문제가 발견되었습니다.
1. PEAR의 메일 클래스를 활용하세요
PEAR의 메일 클래스를 사용하면 sendmail 또는 SMTP를 사용하여 메일을 보내도록 선택할 수 있습니다. 이러한 패키지 인터페이스는 사용하기 쉽고 직접 바퀴를 새로 만들 필요가 없습니다.
2. 헤더의 제목 글자가 깨져 있는 것에 대하여
제목에 iso-8859-1 인코딩 이외의 텍스트를 직접 입력하지 마세요. 올바른 방법은 제목의 텍스트가 RFC 2047의 사양을 준수하도록 만드는 것입니다. 제목의 텍스트 인코딩은 다음과 같습니다. GB2312이면 올바른 제목 이 형식이어야 합니다
$headers['subject'] = '=?GB2312?B?' . base64_encode('제목 텍스트') .
UTF-8이라면 앞부분의 GB2312를 UTF-8로 바꾸면 됩니다. MTA 차별화가 정말 심각하기 때문에 제목에 GB2312 인코딩을 사용하는 것이 좋습니다. 대부분의 MSP는 자체 개발한 MTA를 사용하며, 어쨌든 대부분의 국내 MTA는 GB2312 인코딩을 지원할 수 있다고 믿습니다.
3. 헤더에 콘텐츠 유형 을 추가하세요.
이메일 헤더의 콘텐츠 유형은 웹페이지의 콘텐츠 유형과 유사하며 text/plain 형식입니다. 이 옵션은 주로 이메일을 받는 클라이언트에 의미가 있습니다. 일부 웹메일은 이메일 내용을 올바르게 표시하기 위해 여기 설정에 따라 인코딩하고 변환합니다. gb2312 인코딩을 사용하여 이메일 주소 .com.tw로 보내면 어떤 일이 발생할지 상상할 수 있습니다.
4. 이메일을 보내는 데 사용하는 호스트를 올바르게 구성하세요.
2) MX Parsing을 설정해야 하는 이유는 위와 동일합니다.
3) 반송 경로가 반송된 이메일을 받을 수 있는지 확인하세요. 그렇지 않으면 이메일 전송 서버가 수신자의 블랙리스트에 포함될 수 있습니다.
$subject = stripslashes($the_post['Title']); $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $message = stripslashes(strip_tags($the_post['Content'])); mail($to, $subject, $message, $headers);
제목 문자열 앞에 인코딩 유형을 추가합니다(예: =?UTF-8?B?
).
제목 문자열 뒤에 추가: ?=
예:
<?php $to = "clairelume@qq.com"; //将此电子邮件地址改为自己的。 $name = $_POST['name']; $email = $_POST['email']; $subject = "来自博客读者的邮件"; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $message = $_POST['message']; mail($to,$subject,$message,"From: ".$email."",$headers); echo 'OK '.$name.', 您的邮件已发送。'; ?>
아주 간단하지 않나요? 사실 문제를 철저하게 분석하면 모든 문제가 쉽게 해결될 것입니다. 이 글이 모든 분들의 공부에 도움이 되기를 바랍니다.