Heim > Artikel > Backend-Entwicklung > So lösen Sie das verstümmelte IMAP-PHP-Problem
Die Lösung für das verstümmelte Problem von imap php: Öffnen Sie zuerst die entsprechende PHP-Datei. Fügen Sie dann iconv hinzu, um das Zeichenkodierungsformat zu konvertieren und das verstümmelte Problem zu lösen, mit Anweisungen wie „iconv(‘gb2312‘,‘utf8‘,imap_base64 ($text) );".
Empfehlung: „PHP-Video-Tutorial“
php imap/pop3-Klasse zum Empfangen von E-Mails, Lösung chinesischer verstümmelter Zeichen
Mein Ziel ist es, den Empfang von E-Mails auf dem eingebetteten Entwicklungsboard zu realisieren, natürlich habe ich gegoogelt Dabei habe ich festgestellt, dass es noch viele Implementierungsmethoden gibt: PHP ist die einfachste, die C-Socket-Implementierung die effizienteste (so empfinde ich es) und natürlich ist auch die Python-Implementierung unverzichtbar (aber ich habe sie noch nicht getestet). und so weiter.
Heute werde ich zuerst die PHP-E-Mail-Empfangsklasse vorstellen, die ursprünglich vom Ausländer Mitul Koradia geschrieben wurde. Ich finde, dass die Implementierungsfunktion auch sehr vollständig ist:
Die Hauptmethoden dieser Klasse sind wie folgt:
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
Allerdings gibt es einige Mängel, die ich nach dem Lesen leicht geändert habe, hauptsächlich weil der E-Mail-Header nicht MIME-dekodiert war und der chinesische Inhalt der E-Mail verstümmelt war.
Bezüglich des Dekodierungsprozesses des E-Mail-Headers sieht die Verarbeitungsmethode von Mitul Koradia zunächst wie folgt aus:
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; }
Aber das Rückgabeergebnis sind MIME-codierte Zeichen, was offensichtlich nicht funktioniert, also habe ich die Methode imap_mime_header_decode hinzugefügt hat funktioniert.
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; }
Was das Problem des verstümmelten chinesischen Inhalts in E-Mails betrifft, werden Ausländer es definitiv nicht in Betracht ziehen. Tatsächlich ist es relativ einfach, das Zeichenkodierungsformat zu konvertieren:
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; }
Ich bin neu in PHP Ich habe das Gefühl, dass ich immer noch nicht viel verstehe. Ich hoffe, dass ich weiter hart arbeiten kann
Das obige ist der detaillierte Inhalt vonSo lösen Sie das verstümmelte IMAP-PHP-Problem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!