Maison > Article > développement back-end > Comment résoudre le problème tronqué d'imap php
La solution au problème tronqué de imap php : ouvrez d'abord le fichier PHP correspondant ; puis ajoutez iconv pour convertir le format d'encodage des caractères afin de résoudre le problème tronqué. L'instruction est telle que "iconv('gb2312', 'utf8',imap_base64 ($texte));".
Recommandé : "Tutoriel vidéo PHP"
php imap/pop3 recevoir un cours de courrier, résoudre le chinois Caractères tronqués
Mon objectif est d'implémenter la réception d'e-mails sur la carte de développement embarquée. Bien sûr, j'ai cherché sur Google et découvert qu'il existe de nombreuses méthodes d'implémentation : PHP est le plus simple et le socket C est le plus efficace. (c'est ce que je ressens) ), bien sûr, l'implémentation de python est également indispensable (mais je ne l'ai pas encore testé) et ainsi de suite.
Aujourd'hui, je vais d'abord présenter la classe de réception de courrier PHP. Cette classe a été écrite à l'origine par l'étranger Mitul Koradia. Je pense que la fonction d'implémentation est également très complète :
Les principales méthodes de celle-ci. class sont les suivantes :
class receiveMail { ... function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110',$ssl = false) //Constructure function getHeaders($mid) // Get Header info function getTotalMails() //Get Total Number off Unread Email In Mailbox function getUnreadMails() //Get Number of Unread Mail from Mailbox function searchUnreadMails() //Find Numbers of Unread Mail by imap_search Method function GetAttach($mid,$path) // Get Atteced File from Mail function getBody($mid) // Get Message Body function deleteMails($mid) // Delete That Mail function close_mailbox() //Close Mail Box
Cependant, il y a quelques défauts que j'ai apportés après les avoir lus. La raison principale est que l'en-tête de l'e-mail n'était pas décodé MIME et que le contenu chinois de l'e-mail était tronqué.
Tout d'abord, concernant le processus de décodage de l'en-tête de l'e-mail, la méthode de traitement de Mitul Koradia est la suivante :
function getHeaders($mid) // Get Header info { if(!$this->marubox) return false; $mail_header=imap_header($this->marubox,$mid); $sender=$mail_header->from[0]; $sender_replyto=$mail_header->reply_to[0]; if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster') { $mail_details=array( 'from'=>strtolower($sender->mailbox).'@'.$sender->host, 'fromName'=>$sender->personal, 'subject'=>$mail_header->subject, 'to'=>$mail_header->toaddress ); } return $mail_details; }
Mais le résultat renvoyé est des caractères codés MIME, ce qui évidemment ne fonctionne pas, j'ai donc ajouté la méthode imap_mime_header_decode et cela a fonctionné.
function getHeaders($mid) // Get Header info { if(!$this->marubox) return false; $mail_header=imap_header($this->marubox,$mid); $sender=$mail_header->from[0]; $sender_replyto=$mail_header->reply_to[0]; if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster') { $mail_details=array( 'from'=>strtolower($sender->mailbox).'@'.$sender->host, 'fromName'=>imap_mime_header_decode($sender->personal)[0]->text, 'subject'=>imap_mime_header_decode($mail_header->subject)[0]->text, 'to'=>imap_mime_header_decode($mail_header->toaddress)[0]->text ); } return $mail_details; }
Enfin, concernant le problème du contenu chinois tronqué dans les emails, les étrangers n'y penseront certainement pas. En fait, c'est relativement simple, ajoutez simplement iconv pour convertir le format d'encodage des caractères :
function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) //Get Part Of Message Internal Private Use { if(!$structure) { $structure = imap_fetchstructure($stream, $msg_number); } if($structure) { if($mime_type == $this->get_mime_type($structure)) { if(!$part_number) { $part_number = "1"; } $text = imap_fetchbody($stream, $msg_number, $part_number); if($structure->encoding == 3) { return iconv('gb2312','utf8',imap_base64($text)); } else if($structure->encoding == 4) { return iconv('gb2312','utf8',imap_qprint($text)); } else { return iconv('gb2312','utf8',$text); } } if($structure->type == 1) /* multipart */ { while(list($index, $sub_structure) = each($structure->parts)) { if($part_number) { $prefix = $part_number . '.'; } $data = $this->get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1)); if($data) { return $data; } } } } return false; }Débutant en PHP, j'ai l'impression qu'il y en a beaucoup que je ne comprends toujours pas, j'espère pouvoir continuer sur mon bon travail
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!