Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung PHP

Problem mit imap-fetchstructure, Mail-Codierung

Mitglied: Gandolfo

Gandolfo (Level 1) - Jetzt verbinden

01.11.2013 um 04:10 Uhr, 3095 Aufrufe, 1 Kommentar

Hallo,

ich möchte mit meiner Homepage regelmäßig ein eMail-Postfach abrufen, und die Mails auslesen und in eine Datenbank speichern. Das sollte ein eigenes kleines Ticketsystem sein. An sich funktioniert das ganze Script auch - Absendername, Mail-Adresse, Betreff und Text werden korrekt zugehörig ausgelesen - nur das mit der Mail-Codierung fläuft schief.

Mit imap_qprint($content); und imap_base64($content); kann ich die Mails einzeln korrekt darstellen. Ich weiß also, wie die Mails entschlüsselt werden. Das ist nicht mein Problem.

Aber die korrekte Bedingung trifft nicht zu.

Die Mail-Struktur wird aufgerufen mit $struct = imap_fetchstructure($mailbox, $i); und das funktioniert ja auch alles.
Und mit $encoding_id = $struct->encoding; sollte man dann die Verschlüsselungsart herausfinden:

$struct = imap_fetchstructure($mailbox, $i);
$encoding_id = $struct->encoding;


Und genau da liegt das Problem.

Die eine Mail wird mit imap_qprint korrekt dargestellt, die andere Mail wird mit imap_base64 korrekt dargestellt. Beide Mails sollen aber angeblich die $encoding_id 0 haben. Und genau das kann nicht sein. Jemand der sich hier auskennt, weiß dass es jeweils die Id 4 und 3 haben müsste.

Also wieso gibt $struct->encoding; eine falsche ID zurück, wenn alle anderen Werte korrekt angezeigt werden?

Das ganze sollte dann so ausgewertet werden:

if($encoding_id =="3") {
$content = imap_base64($content);
$content = utf8_decode($content); //formatiert umlaute

} elseif($encoding_id =="4") {

$content = imap_qprint($content);
} else {

$content;
}

Das funktioniert aber erst, wenn er die korrekte ID ermittelt.


Und weil das nicht funktioniert hat, habe ich noch Beispiele gefunden mit if(imap_base64($content) { ... } elseif..

Das funktioniert aber genauso wenig, weil er dann die erste Bedingung imap_base64 auch dann ausführt, wenn es sich um eine imap_qprint-Verschlüsselte Mail handelt. Also auch dann führt er die falsche Bedingung aus.

Jetzt bin ich ratlos und wüsste nicht, wie ich die Mails korrekt entschlüsseln sollte.

Viele Grüße
Matthias
Mitglied: Gandolfo
01.11.2013, aktualisiert 02.11.2013
Hier ist der PHP-Code

01.
<? 
02.
// POP3-Server 
03.
$host = ""
04.
$port = "110"
05.
 
06.
// Logindaten 
07.
$user = ""
08.
$passwort = ""
09.
 
10.
 
11.
// Verbinden zur Mailbox  
12.
$mailbox=imap_open("{".$host."/pop3:110/novalidate-cert}INBOX",$user,$passwort, OP_SILENT);  
13.
  
14.
// Überprüfen ob Verbindung erfolgreich,  
15.
// dann weiter...  
16.
if ($mailbox) { 
17.
	 
18.
	// Posteingang überprüfen  
19.
	$check=imap_check($mailbox);  
20.
 
21.
	$anzahl_nachrichten = $check->Nmsgs; // Anzahl vorhandener Emails im Postfach  
22.
	 
23.
	$anzahl_neue_nachrichten = $check->Recent; // Anzahl neuer Emails im Postfach  
24.
	 
25.
	// Emails auslesen 
26.
	$nMessages = imap_num_msg($mailbox); 
27.
	for($i = 1; $i <= $nMessages; $i++) {  
28.
		  
29.
 
30.
		// Header erfassen  
31.
		$mail_header = imap_headerinfo($mailbox, $i);  
32.
		 
33.
		// Datum erfassen  
34.
		$mail_date = $mail_header->Date
35.
		$mail_date = date("Y-m-d H:i:s",strtotime($mail_date)); 
36.
		 
37.
		// Mail-ID erfassen  
38.
		$mail_id = $mail_header->message_id; 
39.
		$elements1 = imap_mime_header_decode($mail_id); 
40.
		 
41.
		for ($i9=0; $i9<count($elements1); $i9++) { 
42.
			$mail_id = $elements1[$i9]->text; 
43.
44.
		$string_laenge = strlen ($mail_id); 
45.
		$mail_id = substr ($mail_id,1,$string_laenge-2); 
46.
		 
47.
				 
48.
		// Empfänger erfassen  
49.
		$mail_to = $mail_header->toaddress; //Mehrere Emnpfänger einbauen 
50.
		$elements2 = imap_mime_header_decode($mail_to); 
51.
		 
52.
		for ($i9=0; $i9<count($elements2); $i9++) { 
53.
			$mail_to = $elements2[$i9]->text; 
54.
55.
		 
56.
		// Absendername erfassen  
57.
		$mail_from_name = $mail_header->from [0]->personal; 
58.
		$elements3 = imap_mime_header_decode($mail_from_name); 
59.
		 
60.
		for ($i9=0; $i9<count($elements3); $i9++) { 
61.
			$mail_from_name = $elements3[$i9]->text; 
62.
63.
		  
64.
		// Absender-eMail-Adresse erfassen  
65.
		$mail_from_address = $mail_header->from [0]->mailbox."@".$mail_header->from [0]->host; 
66.
		$elements4 = imap_mime_header_decode($mail_from_address); 
67.
		 
68.
		for ($i9=0; $i9<count($elements4); $i9++) { 
69.
			$mail_from_address = $elements4[$i9]->text; 
70.
71.
		  
72.
		// Kopieempfänger erfassen  
73.
		$mail_copy_to = $mail_header->cc[0] ->mailbox."@".$mail_header->cc[0] ->host;//Mehrere Emnpfänger einbauen 
74.
		$elements5 = imap_mime_header_decode($mail_copy_to); 
75.
		 
76.
		for ($i9=0; $i9<count($elements5); $i9++) { 
77.
			$mail_copy_to = $elements5[$i9]->text; 
78.
79.
		  
80.
		  
81.
		// Betreff erfassen  
82.
		$mail_subject = ""
83.
		$mail_subject2 = $mail_header->subject; 
84.
		 
85.
		$elements7 = imap_mime_header_decode($mail_subject2); 
86.
		 
87.
		for ($i9=0; $i9<count($elements7); $i9++) { 
88.
			$mail_subject2 = $elements7[$i9]->text; 
89.
			$mail_subject = $mail_subject.$mail_subject2
90.
91.
		 
92.
		 
93.
		//Anhang + Content 
94.
		 
95.
		 
96.
$struct = imap_fetchstructure($mailbox, $i);  
97.
$encoding_id = $struct->encoding; // Hier sollte die Codierung-ID übergeben werden 
98.
			    
99.
				$parts = $struct->parts; 
100.
				$iu = 0; 
101.
		 
102.
				if (!$parts) { // Simple message, only 1 piece 
103.
				  $attachment = array(); // No attachments 
104.
				  $content = imap_body($mailbox, $i); 
105.
				} else { // Complicated message, multiple parts 
106.
			    
107.
				  $endwhile = false; 
108.
			    
109.
				  $stack = array(); // Stack while parsing message 
110.
				  $content = "";    // Content of message 
111.
				  $attachment = array(); // Attachments 
112.
			    
113.
				  while (!$endwhile) { 
114.
					if (!$parts[$iu]) { 
115.
					  if (count($stack) > 0) { 
116.
						$parts = $stack[count($stack)-1]["p"]; 
117.
						$iu     = $stack[count($stack)-1]["i"] + 1; 
118.
						array_pop($stack); 
119.
					  } else
120.
						$endwhile = true; 
121.
122.
123.
				  
124.
					if (!$endwhile) { 
125.
						 
126.
						 
127.
					  // Create message part first (example '1.2.3'
128.
					  $partstring = ""
129.
					  foreach ($stack as $s) { 
130.
						$partstring .= ($s["i"]+1) . "."
131.
132.
					  $partstring .= ($iu+1); 
133.
				    
134.
					  if (strtoupper($parts[$iu]->disposition) == "ATTACHMENT") { // Attachment 
135.
						$attachment[] = array("filename" => $parts[$iu]->parameters[0]->value, 
136.
											  "filedata" => imap_fetchbody($mailbox, $i, $partstring), 
137.
											  "fileencoding" => $parts[$iu]->encoding, 
138.
											  "type" => $parts[$iu]->type); 
139.
										 
140.
					  } elseif (strtoupper($parts[$iu]->subtype) == "PLAIN") { // Message 
141.
						$content .= imap_fetchbody($mailbox, $i, $partstring); 
142.
						 
143.
144.
145.
 
146.
		   		 
147.
					if ($parts[$iu]->parts) { 
148.
					  $stack[] = array("p" => $parts, "i" => $iu); 
149.
					  $parts = $parts[$iu]->parts; 
150.
					  $iu = 0; 
151.
					} else
152.
					  $iu++; 
153.
154.
				  } // while 
155.
				} // complicated message 
156.
 
157.
 
158.
159.
	imap_expunge($mailbox); 
160.
	imap_close($mailbox); 
161.
162.
?>
Bitte warten ..
Ähnliche Inhalte
PHP
Codierung für fwrite
gelöst Frage von 117643PHP5 Kommentare

Guten Mittag miteinader, ich habe ein Wordpress-Plugin für Woocommerce geschrieben welches eine CSV mit erzeugen soll, dies klappt auch, ...

Google Android
Android Programmierung Problem mit Codierung von Umlauten
gelöst Frage von 115122Google Android7 Kommentare

Hallo, folgendes Problem: Es gibt eine Textdatei, in welcher z.B. folgender String steht: "monatliche Prüfungen". Die App bezieht bestimmte ...

Python
Python IMAP Idle Problem
Frage von tingelPython

Hallo zusammen, ich habe in Python ein kleines Scirpt, welches Mail abruft und diese auswertet. Das läuft und läuft. ...

E-Mail
Thunderbird Problem mit Ordner (IMAP)
Frage von MediaWrdE-Mail

Guten Tag, leider habe ich ein Problem mit dem Thunderbird, kurz zu meinem System: -Windows 7 (64bit) -Thunderbird 38.8.0 ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 10 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 11 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 12 StundenSicherheit8 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 12 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...