>  기사  >  백엔드 개발  >  PHP 메일 기능이 UTF-8로 인코딩된 중국어 이메일을 보낼 때 제목이 왜곡되면 어떻게 해야 합니까?

PHP 메일 기능이 UTF-8로 인코딩된 중국어 이메일을 보낼 때 제목이 왜곡되면 어떻게 해야 합니까?

coldplay.xixi
coldplay.xixi원래의
2020-07-27 09:16:072364검색

PHP의 메일 기능을 사용하여 UTF-8로 인코딩된 중국어 이메일을 보낼 때 왜곡된 헤더에 대한 해결 방법: 1. 제목의 텍스트를 RFC 2047의 사양에 맞게 만듭니다. 2. 헤더에 [content-type]을 추가합니다. 메일을 보내는 호스트가 올바르게 구성되었습니다.

PHP 메일 기능이 UTF-8로 인코딩된 중국어 이메일을 보낼 때 제목이 왜곡되면 어떻게 해야 합니까?

php의 메일 기능을 사용하여 UTF-8로 인코딩된 중국어 이메일을 보낼 때 잘못된 헤더에 대한 솔루션:

1 PEAR의 메일 클래스 사용

PEAR의 메일 클래스를 사용하면 sendmail 또는 SMTP를 통해 메시지를 보내는 이 패키지 인터페이스는 사용하기 쉽고 직접 바퀴를 새로 만들 필요가 없습니다.

2. 제목에 문자가 깨져 있는 경우

제목에 iso-8859-1 인코딩 이외의 텍스트를 직접 입력하지 않는 것이 좋습니다. 제목의 텍스트가 다음을 준수합니다. RFC 2047의 사양에 따라 제목의 텍스트 인코딩이 GB2312라고 가정하면 올바른 제목이 이 안에 있어야 합니다. formatiso-8859-1编码之外的文字直接放进subject,正确的方式是让subject 里头的文字符合RFC 2047的规范,假设你的subject 处的文字的编码是GB2312,那么正确的subject 应该是这样的格式

$headers['subject'] = '=?GB2312?B?' . base64_encode('标题文字') . '?=';

如果是UTF-8 的话,把上面开头的GB2312 替换成UTF-8 即可。推荐在标题处使用GB2312 编码,因为MTA 的分化实在是严重,大部分的MSP使用的都是自己开发的 MTA,而相信国内的大部分 MTA 无论如何都是可以支持 GB2312 编码的。

而如果是发送到国外的MSP,则推荐你在subject 处使用经过base64 编码的 UTF-8 文字,因为他们很可能不支持 GB2312 编码。

3.一定在headers 中添加content-type

电子邮件的 headers 中的 content-type 处类似网页的,也是 text/plain; charset=gb2312 这样的格式。这个选项主要对收邮件的客户端有意义,可以避免在客户端出现乱码,部分的 Webmail 也会根据这里的设置对邮件的内容进行编码转换以正确显示。你可以设想一下你用 gb2312 编码发到 .com.tw 的邮箱时候的情况。

4.对你用来发送邮件的主机进行正确配置

1)一定配置反向解析,因为大部分的非固定 IP 都无法做反向解析,部分反垃圾邮件策略以此作为判断依据。

2)一定配置 MX 解析,道理同上。

3)确保你的 return path 是能够收到退信的,否则你的邮件发送服务器可能会进入接收端的黑名单。

$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);

先用函数base64_encode()— 使用MIME base64 对数据进行编码

标题字符串前加编码类型例如: =?UTF-8?B?

标题字符串后加:?=

<?php  
 $to = "clairelume@qq.com"; //将此电子邮件地址改为自己的。  
 $name = $_POST[&#39;name&#39;];  
 $email = $_POST[&#39;email&#39;];  
 $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[&#39;message&#39;];  
 mail($to,$subject,$message,"From: ".$email."",$headers);  
 echo &#39;OK &#39;.$name.&#39;, 您的邮件已发送。&#39;;  
?>

UTF-8이라면 앞부분의 GB2312를 UTF-8로 바꾸시면 됩니다. MTA 차별화가 정말 심각하기 때문에 제목에 GB2312 인코딩을 사용하는 것이 좋습니다. 대부분의 MSP는 자체 개발한 MTA를 사용하며, 어쨌든 대부분의 국내 MTA는 GB2312 인코딩을 지원할 수 있다고 믿습니다.

외국 MSP로 보내는 경우 GB2312 인코딩을 지원하지 않을 가능성이 높으므로 제목에 base64로 인코딩된 UTF-8 텍스트를 사용하는 것이 좋습니다.

3. 헤더에 content-type을 꼭 추가하세요

이메일 헤더의 content-type은 웹페이지와 유사하며 text/입니다. plain; charset=gb2312 code> 이 형식입니다. 이 옵션은 주로 이메일을 받는 클라이언트에 의미가 있습니다. 일부 웹 메일은 이메일 내용을 올바르게 표시하기 위해 여기 설정에 따라 인코딩하고 변환합니다. gb2312 인코딩을 사용하여 이메일 주소 <code>.com.tw 로 보내면 어떤 일이 발생할지 상상할 수 있습니다.

🎜4. 이메일을 보내는 데 사용하는 호스트를 올바르게 구성하세요🎜🎜🎜1) 대부분의 고정되지 않은 IP는 역방향 확인을 수행할 수 없으며 일부 스팸 방지 전략은 이를 판단의 기초로 사용하므로 역방향 확인을 구성해야 합니다. 에 따라. 🎜🎜2) 위와 같은 이유로 MX 파싱을 구성해야 합니다. 🎜🎜3) 반송 경로가 반송된 이메일을 받을 수 있는지 확인하세요. 그렇지 않으면 이메일 전송 서버가 수신자의 블랙리스트에 포함될 수 있습니다. 🎜rrreee🎜먼저 base64_encode() 함수를 사용하세요. MIME base64를 사용하여 데이터를 인코딩하세요🎜🎜제목 문자열 앞에 인코딩 유형을 추가하세요. 예: =?UTF-8?B? 🎜🎜제목 문자열 뒤에 추가하세요: ?=🎜🎜예: 🎜rrreee🎜 이렇게 하면 전송된 중국어 이메일의 제목이 왜곡되지 않습니다. 🎜🎜🎜관련 학습 권장 사항: 🎜초보부터 마스터까지 PHP 프로그래밍🎜🎜🎜

위 내용은 PHP 메일 기능이 UTF-8로 인코딩된 중국어 이메일을 보낼 때 제목이 왜곡되면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.