E-Mails abrufen - Fehlerhafte Darstellung

iXtends

Grünschnabel
Hallo,
ich habe mir eine kleine PHP-Klasse geschrieben, mit der ich E-Mails von einem Pop3 Postfach abrufen kann. Das Funktioniert auch alles sehr gut. Nur leider bekomme ich die E-Mails fehlerhaft angezeigt.

1. Werden mir keine Umlaute angezeigt (=FC -> ü, usw.)
2. Bekomme ich, wenn in der Nachricht Umlaute enthalten sind vor der eigentlichen Nachricht einen komischen String (z.B: "<=21--=5Bif gte mso 9=5D>")
3. Wird ein Umlaut in dem Betreff der E-Mail angegeben sieht das ergebnis so aus: "treff äöüäöüß" wird => "=?ISO-8859-1?B?dHJlZmYg5Pb85Pb83w==?="

Meine Seite ist komplett UTF-8 codiert.
Hier noch einmal die komplette E-Mail Klasse
PHP:
<?php
	class mail {
		public function init() {
			self::showMails();
		}
		
		public function getMails() {
			$mbox = self::connectToPop3();
			
			if($mbox != false) {
				$mails = array();
				$msgNumbers = imap_num_msg($mbox);
				
				for($i = 1; $i <= $msgNumbers; $i++) {
					$header = imap_header($mbox, $i);
					
					//print_r($header);
					
					$from = $header->from;
					foreach ($from as $id => $object) {
						$fromname = $object->personal;
						$fromaddress = $object->mailbox . "@" . $object->host;
						
						if($fromname == '') $fromname = $fromaddress;
					}
					
					$from = $header->to;
					foreach ($from as $id => $object) {
						$toname = $object->personal;
						$toaddress = $object->mailbox . "@" . $object->host;
						
						if($toname == '') $toname = $toaddress;
					}
					
					$mails[] = array('subject' => $header->subject, 'date' => $header->date, 'fromname' => $fromname, 'fromaddress' => $fromaddress, 'toname' => $toname, 'toaddress' => $toaddress, 'msgNumber' => $i);
				}
				
				return $mails;
			} else {
				return false;
			}
		}
		
		public function showMails() {
			global $smarty;
			
			$mails = self::getMails();
			
			if($mails == false) {
				echo "Error: imap_open";
			} else {
				$smarty->assign('mails', $mails);
			}
			
			Toolchen::display('inbox.tpl');
		}
		
		public function showMailContent($args) {
			global $smarty;
			
			$mbox = self::connectToPop3();
			$header = imap_header($mbox, $args['msgNumber']);
			$from = $header->from;
			
			foreach ($from as $id => $object) {
				$fromname = $object->personal;
				$fromaddress = $object->mailbox . "@" . $object->host;
				
				if($fromname == '') $fromname = $fromaddress;
			}
			
			$from = $header->to;
			foreach ($from as $id => $object) {
				$toname = $object->personal;
				$toaddress = $object->mailbox . "@" . $object->host;
				
				if($toname == '') $toname = $toaddress;
			}
			
			$body = imap_fetchbody($mbox, $args['msgNumber'], "2");
			$mail = array('subject' => $header->subject, 'date' => $header->date, 'fromname' => $fromname, 'fromaddress' => $fromaddress, 'toname' => $toname, 'toaddress' => $toaddress, 'msgNumber' => $i, 'msgBody' => $body);
			
			$smarty->assign('mail', $mail);
			Toolchen::display('mailDetail.tpl');
		}
		
		public function connectToPop3($plg = 0) {
			require_once('../'.Toolchen::includePlg('users'));
			
			$user = new Users;
			$data = $user->getData(USER_ID);
			
			if(function_exists('imap_open')) {
				return imap_open ("{".$data[0]['usr_mail_server']."/pop3/notls}", $data[0]['usr_mail_user'], $data[0]['usr_mail_pass']);
			} else {
				return false;
			}
		}
	}
?>

Ich denke ihr könnt mir helfen :)
Vielen Dank im voraus
 
Wow danke für die schnelle Antwort.
Hat auch soweit funktioniert, jetzt sieht die E-Mail so aus wie ich sie abgeschickt habe.
Aber ein Problem habe ich immernoch :( Die umlaute werden jetzt als schwarzes kästchen mit ? angezeigt (?).

Ich vermute es liegt daran, dass der String den ich zurück bekomme ISO-8859-1, meine Seite aber UTF-8 ist. Gibt es hier noch eine Möglichkeit?

Danke nochmal :)
 
Dann musst du die Texte noch von ISO 8859-1 zu UTF-8 konvertieren, das geht mit der utf8_encode()-Funktion.
 
Ich habe doch noch ein Problem.
Und zwar setze ich, wenn ich die E-Mail öffne das //Seen Flas mit folgender Funktion:
PHP:
imap_setflag_full($mbox, $msgNr, "\\Seen");

Aber leider wird das Flag nicht gesetzt, wenn ich die E-Mails dann wieder abrufe, ist das Flag nicht gesetzt :(

@Da_Chris: Ich möchte die E-Mails erstmal nur abrufen, das Senden kommt erst später.
 
Zurück