Zeichencode Probleme bei POP3

C3000

Mitglied
Guten Morgen

Ich programmiere derzeit ein Modul in Javascript, dass mir über ein PHP-Script E-Mails von einem Microsoft Exchange Server per POP3 holt.

Das ganze funktioniert wunderbar, jedoch enthalten die E-Mails diese ascii-codes, zumindest glaub ich das es diese sind:
(From: "Hofmann, Simone" <simone.hofmann@xxx.de>)
(Subject: =?iso-8859-1?Q?neue_Kennwortregeln_f=FCr_die_BDS?=)

Ich habe schon versucht mit utfen/decode zu arbeiten, allerdings verstehe ich nicht was php für ein Problem hat. Ob nun der Server die Daten in UTF8 schickt und php damit Probleme hat oder umgekehrt oder ob es nun ein ganz anderes Problem ist weiß ich nicht. Und ohne zu wissen was Falsch ist lässt sich ein Fehler schwer beheben.

Hier noch ein kleiner Codeausschnitt:
Code:
Function RetrieveMessage($message,&$headers,&$body,$lines)
{
	if($this->state!="TRANSACTION")
		return($this->SetError("connection is not in TRANSACTION state"));
	if($lines<0)
	{
		$command="RETR";
		$arguments="$message";
	}
	else
	{
		$command="TOP";
		$arguments="$message $lines";
	}
	if($this->PutLine("$command $arguments")==0)
		return($this->SetError("Could not send the $command command"));
	$response=$this->GetLine();
	if(GetType($response)!="string")
		return($this->SetError("Could not get message retrieval command response"));
	if($this->Tokenize($response," ")!="+OK")
		return($this->SetError("Could not retrieve the message: .$this->Tokenize("\r\n")));
	for($headers=$body=array(),$line=0;;)
	{
		$response=$this->GetLine();
		if(GetType($response)!="string")
			return($this->SetError("Could not retrieve the message"));
		switch($response)
		{
			case ".":
				return("");
			case "":
				break 2;
			default:
				if(substr($response,0,1)==".")
					$response=substr($response,1,strlen($response)-1);
				break;
		}
		if($this->join_continuation_header_lines
		&& $line>0
		&& ($response[0]=="\t"
		|| $response[0]==" "))
			$headers[$line-1].=$response;
		else
		{
			$headers[$line]=$response;
			$line++;
		}
	}
	for($line=0;;$line++)
	{
		$response=$this->GetLine();
		if(GetType($response)!="string")
			return($this->SetError("Could not retrieve the message"));
		switch($response)
		{
			case ".":
				return("");
			default:
				if(substr($response,0,1)==".")
					$response=substr($response,1,strlen($response)-1);
				break;
		}
		$body[$line]=$response;
	}
	return("");
}

Function GetLine()
{
	for($line="";;)
	{
		if(feof($this->connection))
			return(0);
		$line.=fgets($this->connection,100);
		$length=strlen($line);
		if($length>=2
		&& substr($line,$length-2,2)=="\r\n")
		{
			$line=substr($line,0,$length-2);
			if($this->debug)
				$this->OutputDebug("S $line");
			return($line);
		}
	}
}

Danke schon mal für eure hilfe.

MfG
 
Erstes kann mit folgender Funktion dekodiert werden:
PHP:
$string = '&quot;Hofmann, Simone&quot; &lt;simone.hofmann@xxx.de&gt;';
$string = strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
Falls nicht nur die HTML-Metazeichen sondern auch Zeichenentitäten ersetzt werden sollen, muss HTML_SPECIALCHARS durch HTML_ENTITIES ersetzt werden.

Das zweite kann mit der quoted_printable_decode()-Funktion dekodiert werden.
 
Zurück