Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Frage Entwicklung PHP

Mitglied: Gandolfo

Gandolfo (Level 1) - Jetzt verbinden

01.11.2013 um 04:10 Uhr, 3048 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
Outlook & Mail
Mail-Synchronisation per IMAP nicht zuverlässig möglich (6)

Frage von dave84620 zum Thema Outlook & Mail ...

E-Mail
gelöst SBS2011-Exchange- Webmailer- IMAP POP3 (7)

Frage von Ramsys1991 zum Thema E-Mail ...

Outlook & Mail
gelöst Gelöschte Emails durch IMAP in einem Exchange-Postfach werden in Outlook nicht angezeigt (2)

Frage von StefanKittel zum Thema Outlook & Mail ...

Neue Wissensbeiträge
Viren und Trojaner

FinFisher: Internetprovider schieben Spitzelopfern Malware unter

(1)

Information von kaiand1 zum Thema Viren und Trojaner ...

Humor (lol)

Wo ist der Fehler auf dem Bild?

(17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Update

Offenbar erneutes MS-Update mit Fehlerschleife (2012 R2)

Information von VGem-e zum Thema Windows Update ...

Heiß diskutierte Inhalte
Lizenzierung
Programm soll in verschiedenen Versionen lizenziert sein (20)

Frage von Yanmai zum Thema Lizenzierung ...

Humor (lol)
Wo ist der Fehler auf dem Bild? (17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Userverwaltung
Ordner-Rechte für Dom.Admin einschränken? (13)

Frage von kilobyte zum Thema Windows Userverwaltung ...