Position actuelle: Accueil> Derniers articles> Comment combiner les extensions MB_DECODE_MIMEHEADER et MAISPARSE pour améliorer la précision de l'analyse des e-mails?

Comment combiner les extensions MB_DECODE_MIMEHEADER et MAISPARSE pour améliorer la précision de l'analyse des e-mails?

gitbox 2025-09-12
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Ce n&#39;est pas pertinent ici PHP Exemple de code,N&#39;a rien à voir avec le texte</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">"Ce code n&#39;a rien à voir avec le contenu du texte"</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">?&gt;</span></span><span>

&lt;hr&gt;

Comment combiner mb_decode_mimeheader et mailparse Extensions pour améliorer la précision de l&#39;analyse des e-mails?

Lors du traitement du contenu des e-mails,Les formats d&#39;encodage des en-têtes de messagerie sont divers et complexes,Surtout quand il s&#39;agit de non ASCII Temps de caractère,Il est difficile d&#39;analyser。PHP Fournit plusieurs extensions pour aider à résoudre les e-mails,Cet article se concentre sur la façon de combiner `mb_decode_mimeheader` et `mailparse` Étendu,提升邮件解析的准确性et鲁棒性。

un、Introduction de fond

Le contenu des e-mails est généralement codé par plusieurs couches,Par exemple MIME codage、Base64 codage等,邮件头部的字符codage也可能是 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 Divers formats。`mailparse` Étendu是 PHP Fourni des outils spécifiquement pour l&#39;analyse des structures de courrier,能够提取邮件各个部分的内容et信息。`mb_decode_mimeheader` Il est utilisé pour décoder l&#39;en-tête de courrier MIME codage的字符串,En particulier avec non ASCII Une partie du personnage。

deux、Problèmes et défis

- Utiliser directement `mailparse` Lors de l&#39;extraction de l&#39;en-tête de messagerie,Le champ d&#39;en-tête est souvent encore MIME codage格式,Montrer directement comme tel `=?UTF-</span><span><span class="hljs-number">8</span></span><span>?B?...?=` formulaire,Lecture hostile。
- 不同邮件客户端对邮件头的codage实现存在差异,Provoque des en-têtes de courrier électronique à analyser les codes défaillants ou brouillés。
- Utiliser uniquement `mb_decode_mimeheader` Lors du traitement des en-têtes de messagerie,Impossible d&#39;analyser la structure complexe du corps et des pièces jointes du courrier électronique。

trois、Schéma d&#39;utilisation combinée

</span><span><span class="hljs-number">1</span></span><span>. utiliser `mailparse` Résoudre la structure du courrier

```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">// Disponible Content-Type, Content-Transfer-Encoding Attendre les informations</span></span><span>
}
</span></span>
  1. Décoder le champ d'en-tête de messagerie à l'aide de MB_DECODE_MIMEHEADER

Après avoir extrait les champs de l'en-tête de courrier, convertissez le codage avec 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">// Sujet chinois décodé de sortie</span></span><span>
</span></span>
  1. Exemple de processus d'analyse de combinaison

 <span><span><span class="hljs-comment">// Lire le contenu de l&#39;e-mail original</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">// Résoudre la structure du courrier</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">// Décoder les champs clés de l&#39;en-tête de messagerie</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">// Informations d&#39;en-tête de messagerie décodées de sortie</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"thème:<span class="hljs-subst">{$subject}</span></span></span><span>\nDepuis:</span><span><span class="hljs-subst">{$from}</span></span><span>\n";
</span></span>

4. Effets et avantages

  • Utilisez Mailarse pour traiter la structure globale de l'e-mail, y compris le texte, les pièces jointes et les informations codées, pour éviter la cumbersomeness de la division manuelle du contenu de l'e-mail.

  • Utilisez MB_DECODE_MIMEHEADER pour décoder l'en-tête de messagerie pour assurer l'affichage correct des informations d'en-tête de messagerie dans des environnements multicanguels et multi-codes, et évitez le code brouillé.

  • La combinaison des deux peut améliorer considérablement la précision et la compatibilité de l'analyse des e-mails.

5. Choses à noter

  • Il est nécessaire de s'assurer que les extensions de Mailparse et MbString sont installées et activées dans l'environnement PHP.

  • Pour certains formats de codage spéciaux ou des e-mails extrêmement complexes, la stratégie d'analyse doit être ajustée en fonction de circonstances spécifiques.

  • Les données analysées doivent être traitées en toute sécurité pour éviter les risques de sécurité tels que l'injection d'en-tête de messagerie.

Résumer

La combinaison des extensions MB_DECODE_MIMEHEAGHER et MAISPARSE peut résoudre efficacement les problèmes de divers codages et de structures complexes dans le processus d'analyse des e-mails, améliorer la précision de l'analyse des en-têtes et du contenu des e-mails, et est une solution pratique indispensable dans la gestion des systèmes de messagerie.

 <span></span>