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, 3303 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
Batch & Shell

Powershellscript ändert CSV Codierung?

gelöst Frage von TheUnrealBatch & Shell5 Kommentare

Moin zusammen, ich habe mir (ich glaube es war tatsächlich hier) ein Powershellscript besorgt, mit dem ich automatisiert Emailanhänge ...

E-Mail

Imap Umzug mit E-Mail-Adressen

gelöst Frage von Hans3003E-Mail13 Kommentare

Hallo zusammen, habe eine Frage zum Email Umzug, folgendes Szenario: Ich habe einen Webserver, auf dem 50 Postfächer vorhanden ...

Batch & Shell

Codierung einer Textdatei ermitteln

Frage von MarRicBatch & Shell9 Kommentare

Hallo zusammen, ich stehe aktuell vor folgender Herausforderung: Von einem Kunde bekomme ich jeden Tag CSV-Dateien geliefert, die von ...

Batch & Shell

txt mit UTF-8 Codierung per batch in ANSI Codierung umwandeln

gelöst Frage von pdiddoBatch & Shell3 Kommentare

Hi Leute, ich brauche eure Hilfe. Ich habe eine .txt Datei die in UTF-8 codiert ist. Ich möchte mittels ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 21 StundenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 1 TagSicherheit1 Kommentar

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 1 TagInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 2 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Glasfaserkabel verlegen und Anschlüsse setzen
Frage von LLL0rdLAN, WAN, Wireless21 Kommentare

Hallo Leute, ich muss demnächst ein Netzwerkkabel auf einer Länge von ca. 70 Metern verlegen. Das Netzwerkkabel soll dabei ...

Windows Server
Mac Rechner im Windows Netzwerk - was jetzt?
gelöst Frage von Kopfg3ldWindows Server18 Kommentare

Hallo zusammen, ich habe folgende Herausforderungen. Aber erst mal was kurz zum Netzwerk - Windows Server (ältester ist ein ...

Microsoft Office
Sharepoint 2016 mag keine Umlaute in .docx-Titeln
gelöst Frage von DerWoWussteMicrosoft Office14 Kommentare

Moin Kollegen. Nutzt hier jemand Sharepoint? Könnt Ihr, unabhängig von der Sharepointversion, bitte einen Test machen? Ladet ein .docx ...

Basic
VBS soll alle Ordner auswählen, die im Startmenu angezeigt werden
Frage von Senseless-CreatureBasic12 Kommentare

Guten Morgen - gibt es eine Möglichkeit, per VBS das Startmenu in Win10 zu modifizieren? Ich beherrsche VBS mittlerweile ...