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

Problem mit imap-fetchstructure, Mail-Codierung

Mitglied: Gandolfo

Gandolfo (Level 1) - Jetzt verbinden

01.11.2013 um 04:10 Uhr, 3154 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
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 18 StundenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 1 TagSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 1 TagWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Sicherheit
Verbindliche Zustellung per E-Mail?
Frage von ahussainSicherheit18 Kommentare

Hallo allerseits, ein Kunde von mir nutzt intensiv Fax. Hauptgrund: zusammen mit einer Empfangsbestätigung ist eine verbindliche Zustellung gewährleistet. ...

Sonstige Systeme
Wie Normenkataloge im Unternehmen bereit stellen?
Frage von MuzzepuckelSonstige Systeme14 Kommentare

Hallo Kollegen, ich lese schon lange hier mit, nun mein ersrer Beitrag, bzw. Frage. :-) Wir benötigen für unsere ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk13 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...