<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 여기에는 관련이 없습니다 PHP 코드 예제,텍스트와 관련이 없습니다</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummyFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"이 코드는 텍스트의 내용과 관련이 없습니다."</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">dummyFunction</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
결합하는 방법 mb_decode_mimeheader 그리고 mailparse 이메일 구문 분석의 정확도를 향상시키기위한 확장?
이메일 컨텐츠를 처리 할 때,이메일 헤더의 인코딩 형식은 다양하고 복잡합니다.,특히 비에 관해서는 ASCII 캐릭터 시간,구문 분석하기가 어렵습니다。PHP 이메일을 해결하는 데 도움이되는 다양한 확장 기능을 제공합니다,이 기사는 결합하는 방법에 중점을 둡니다 `mb_decode_mimeheader` 그리고 `mailparse` 펼친,提升邮件解析的准确性그리고鲁棒性。
하나、배경 소개
이메일 콘텐츠는 일반적으로 여러 계층으로 인코딩됩니다,예를 들어 MIME 코딩、Base64 코딩等,邮件头部的字符코딩也可能是 ISO-</span><span><span class="hljs-number">8859</span></span><span>-</span><span><span class="hljs-number">1</span></span><span>、UTF-</span><span><span class="hljs-number">8</span></span><span>、GBK 다양한 형식。`mailparse` 펼친是 PHP 메일 구조를 구문 분석하기위한 도구를 제공했습니다,能够提取邮件各个部分的内容그리고信息。`mb_decode_mimeheader` 메일 헤더를 해독하는 데 사용됩니다 MIME 코딩的字符串,특히 비 ASCII 캐릭터의 일부。
둘、문제와 도전
- 직접 사용하십시오 `mailparse` 이메일 헤더를 추출 할 때,헤더 필드는 종종 여전히 있습니다 MIME 코딩格式,직접 보여주십시오 `=?UTF-</span><span><span class="hljs-number">8</span></span><span>?B?...?=` 형태,비우호적 인 독서。
- 不同邮件客户端对邮件头的코딩实现存在差异,일부 전자 메일 헤더가 구문 분석에 실패하거나 차단 된 코드를 유발합니다.。
- 만 사용하십시오 `mb_decode_mimeheader` 이메일 헤더를 처리 할 때,이메일 본문 및 첨부 파일의 복잡한 구조를 구문 분석 할 수 없습니다.。
삼、결합 된 사용 체계
</span><span><span class="hljs-number">1</span></span><span>. 사용 `mailparse` 메일 구조를 해결하십시오
```php
</span><span><span class="hljs-variable">$mime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_parse_file</span></span><span>(</span><span><span class="hljs-string">'path/to/email.eml'</span></span><span>);
</span><span><span class="hljs-variable">$structure</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_get_structure</span></span><span>(</span><span><span class="hljs-variable">$mime</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$structure</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$section</span></span><span>) {
</span><span><span class="hljs-variable">$part</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_get_part</span></span><span>(</span><span><span class="hljs-variable">$mime</span></span><span>, </span><span><span class="hljs-variable">$section</span></span><span>);
</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_get_part_data</span></span><span>(</span><span><span class="hljs-variable">$part</span></span><span>);
</span><span><span class="hljs-comment">// 사용 가능 Content-Type, Content-Transfer-Encoding 정보를 기다리십시오</span></span><span>
}
</span></span>MB_DECODE_MIMEHEADER를 사용하여 이메일 헤더 필드를 디코딩하십시오
메일 헤더에서 필드를 추출한 후 인코딩을 mb_decode_mimeheader 로 변환합니다.
<span><span><span class="hljs-variable">$rawSubject</span></span><span> = </span><span><span class="hljs-string">"=?UTF-8?B?5rWL6K+V5LiK5Lyg5paH5Lu2?="</span></span><span>;
</span><span><span class="hljs-variable">$decodedSubject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_decode_mimeheader</span></span><span>(</span><span><span class="hljs-variable">$rawSubject</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decodedSubject</span></span><span>; </span><span><span class="hljs-comment">// 출력 해독 중국 주제</span></span><span>
</span></span>조합 구문 분석 프로세스 예
<span><span><span class="hljs-comment">// 원본 이메일 콘텐츠를 읽으십시오</span></span><span>
</span><span><span class="hljs-variable">$emailContent</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'path/to/email.eml'</span></span><span>);
</span><span><span class="hljs-comment">// 메일 구조를 해결하십시오</span></span><span>
</span><span><span class="hljs-variable">$mime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_parse</span></span><span>(</span><span><span class="hljs-variable">$emailContent</span></span><span>);
</span><span><span class="hljs-variable">$headers</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mailparse_msg_get_part_data</span></span><span>(</span><span><span class="hljs-variable">$mime</span></span><span>)[</span><span><span class="hljs-string">'headers'</span></span><span>] ?? [];
</span><span><span class="hljs-comment">// 이메일 헤더에서 키 필드를 디코딩하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$headers</span></span><span>[</span><span><span class="hljs-string">'subject'</span></span><span>])) {
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_decode_mimeheader</span></span><span>(</span><span><span class="hljs-variable">$headers</span></span><span>[</span><span><span class="hljs-string">'subject'</span></span><span>]);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
}
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$headers</span></span><span>[</span><span><span class="hljs-string">'from'</span></span><span>])) {
</span><span><span class="hljs-variable">$from</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_decode_mimeheader</span></span><span>(</span><span><span class="hljs-variable">$headers</span></span><span>[</span><span><span class="hljs-string">'from'</span></span><span>]);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$from</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
}
</span><span><span class="hljs-comment">// 출력 디코딩 이메일 헤더 정보</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"주제:<span class="hljs-subst">{$subject}</span></span></span><span>\n에서:</span><span><span class="hljs-subst">{$from}</span></span><span>\n";
</span></span>4. 효과와 장점
MailParse를 사용하여 텍스트, 첨부 파일 및 코딩 된 정보를 포함하여 전자 메일의 전체 구조를 처리하여 이메일의 내용을 수동으로 분할하는 성향을 피하십시오.
MB_DECODE_MIMEHEADER를 사용하여 이메일 헤더를 디코딩하여 다중 언어 및 다중 코드 환경에서 이메일 헤더 정보를 올바르게 표시하고 차량 코드를 피하십시오.
이 둘을 결합하면 이메일 구문 분석의 정확성과 호환성을 크게 향상시킬 수 있습니다.
5. 주목할만한 것들
PHP 환경에 MailParse 및 MBString Extension이 설치되어 활성화되어야합니다.
일부 특수 인코딩 형식 또는 매우 복잡한 이메일의 경우 특정 상황에 따라 분석 전략을 조정해야합니다.
Parsed 데이터는 이메일 헤더 주입과 같은 보안 위험을 방지하기 위해 안전하게 처리되어야합니다.
요약
MB_DECODE_MIMEHEADER 및 MAILPARSE 확장 기능을 결합하면 이메일 구문 분석 프로세스에서 다양한 인코딩 및 복잡한 구조의 문제를 효과적으로 해결하고 이메일 헤더 및 콘텐츠의 구문 분석 정확도를 개선하며 전자 메일 시스템을 처리 할 때 없어서는 안될 실용적인 솔루션입니다.
<span></span>