Maison > développement back-end > Problème PHP > Comment résoudre le problème tronqué d'imap php

Comment résoudre le problème tronqué d'imap php

藏色散人
Libérer: 2023-03-04 10:46:02
original
3163 Les gens l'ont consulté

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));".

Comment résoudre le problème tronqué d'imap php

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
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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; 
}
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
Problème avec php imap recevant le courrier qq
Depuis 1970-01-01 08:00:00
0
0
0
échec du mappage des clés vim
Depuis 1970-01-01 08:00:00
0
0
0
Résoudre une phrase du code vim
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal