Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2832 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Exchange Server
Problem mit einer mail im popcon (8)

Frage von jensgebken zum Thema Exchange Server ...

Microsoft Office
Serien Mail Problem Office 2013

Frage von hagerino zum Thema Microsoft Office ...

Google Android
gelöst Android Programmierung Problem mit Codierung von Umlauten (7)

Frage von lordzwieback zum Thema Google Android ...

E-Mail
Outlook,Mail,Smartphone Problem als gelesen markiert (6)

Frage von Yannosch zum Thema E-Mail ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...