php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.05.2005, 15:38  
Gast
 
Beiträge: n/a
Standard [Erledigt] imap_body richtig decoden /MIMETypen/Mail_mimeDecode

Hi Leute

Ich lese minütlich eine mailbox via IMAP aus und speichere die neuen emails in meiner mysqlDB. Das klappt auch ganz gut, den header mit den Informationen des Absenders, des Empfängers, die CC, BCC, das Subject und so weiter kann ich korrekt ermitteln.
Auch das decoden funktioniert mit dem Subject und dem Absendernamen korrekt, mittels

Code:
$subject = imap_utf8($subject);
$subject = utf8_decode($subject);

Wo ich jetzt aber noch komplett stecken bleibe ist beim Auslesen des Mail bodies mit dem Textinhalt.
Im Netz habe ich wenige Informationen gefunden, und nichts hat wirklich geklapt.

Den Body hole ich mit
Code:
$mailtext = imap_body($mailbox, $index);
Nun gibt es mir mails aus, die so aussehen:

Zitat:
This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. ------_=_NextPart_001_01C54F11.577D1260 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
So sehen die Mails aus die als MIME-type "multipart" haben.

Andere Mails (MIME-type 0, also einfach text), sehen wiederum so aus:

Zitat:
Messieurs, J'ai bien remport=E9 cette ench=E8re en plus j'i pay=E9 la facture le 22.= 04.2005,=20 mais =E0 ce jour, je n'ai toujours rien re=E7u,
usw... einfach mit falschem encoding.


Ich blicke hier einfach nicht durch und hoffe, dass mir jemand einen Denkanstoss geben könnte. Was hat es mit den verschiedenen Encodings auf sich (base65, 7 oder 8 bit, quoted printable, binary --->http://ch2.php.net/manual/de/functio...hstructure.php)
ud wie muss ich mit denen umgehen?

Ich stelle mir etwas ähnliches wie:
Code:
if ( $tcode == 0 ) { 
    //decodier 7bit string
}	
if ( $tcode == 3 ) { 
    //decodier base64
}
..... usw

Danke im Voraus und Gruss,
dsxs
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.05.2005, 16:12  
Gast
 
Beiträge: n/a
Standard

1. "imap_fetchstructure: Diese Funktion liefert die gesamten Strukturinformationen zu einer gegebenen Nachricht. Das zurückgegebene Objekt enthält den Umschlag, die internen Daten, Größe und Flags der Nachricht sowie ein (rekursives) Array von ähnlichen Objekten für jeden enthaltenen MIME-Teil der Nachricht."

2. was Du suchst: "Tabelle 3. Transfer encodings"

Und wenn Du bequem mit Objekten umgehen möchtest, dann setzt Du auf PHP5.
 
Alt 05.05.2005, 16:18  
Gast
 
Beiträge: n/a
Standard

Musste das eben mal verdauen.

Also mit imap_fetchstructure arbeite ich bereits, ich kann also den Bodytype (plain oder multipart) richtig determinieren, und die entsprechende Codierung (7bit, 8bit, base64 usw) rausfinden.

Was ich aber nicht weiss ist, wie ich nun den Body decodieren muss, damit er schön formatiert ist und den ganzen Müll nicht mehr enthält.
 
Alt 05.05.2005, 16:37  
Gast
 
Beiträge: n/a
Standard

Dann noch mal:
1. Tablle 3
Code:
0 7BIT  <- nix
1 8BIT  <- nix
2 BINARY <- sowas will man nicht
3 BASE64 <- imap_base64
4 QUOTED-PRINTABLE <- imap_qprint
5 OTHER <- who the f.uck is 'other'?
2. Du mußt Dich durch das Objekt von imap_fetchstructure bewegen.
die 1. Entscheidung, die Du treffen mußt:
Code:
0 text 
1 multipart
Isses nur Text, brauchst Du nur noch $struktur->encoding auszuwerten, wie Du imap_body dekodieren mußt. Hier ein Beispiel (Auszug!) für QP:
PHP-Code:
<?php
    
case 4:
        echo 
nl2br(imap_qprint(imap_body($mbox$msgno))); break;
?>
Bekommst Du aber eine multipart-mime Message (also HTML Schrott), haste wesentlich mehr Streß, weil Du durch die "Parts walken" mußt.

Dir das zu erklären, bin ich aber zu faul. Zumal Du das ja auch mit etwas Zeit und Hirnschmalz selber rauskriegst.
 
Alt 05.05.2005, 19:23  
Gast
 
Beiträge: n/a
Standard

Hier mal ein par Fetzen aus meinem Mailprogramm:

PHP-Code:
<?php
     $struktur 
imap_fetchstructure ($Mailbox,$i);
    echo 
"Struktur: $struktur
"
;
     
$kodierung $struktur->encoding;
    echo 
"Kodierung: $kodierung
"
;
    
    
    
$body=imap_body($Mailbox,$i);

 if (
$kodierung == 4)
 {
  
$body htmlentities(quoted_printable_decode($body), ENT_QUOTES);
 }
 elseif (
$kodierung == 3)
 {
  
$body htmlentities(base64_decode($body), ENT_QUOTES);
 }
 else
 {
  
$body htmlentities($bodyENT_QUOTES);
 }
?>
 
Alt 05.05.2005, 23:43  
Gast
 
Beiträge: n/a
Standard

Vielen Dank für die Antworten an euch beide.
Ich fange so langsam an die Sache zu verstehen.

Die Mails mit Type 0 decode ich nun richtig mit quoted_printable_decode() bzw. base64_decode(). Das klapt wunderbar. Ich lasse htmlentities weg, weil ich in der DB wirklich _ausschliesslich_ den Mail-Text haben möchte, um ihn später easy zu verarbeiten.

Nun bin ich mit den Mails mit Type 1 (multipart) beschäftigt. Echt ne harte nuss, hast Recht meikel.
Hab' mir jetzt mal die PEAR base und die Mail_mimeDecode extension geholt, und habe versucht, $mailtext (die variable mit dem mailinhalt, welchen ich davor per imap_body($mailbox, $index); geholt habe) dem mail_mimedecode() zu übergeben.

PHP-Code:
<?php
if ($ttype == 1) {
        
$params['include_bodies'] = true;
        
$params['decode_bodies']  = true;
        
$params['decode_headers'] = true;
        
        
$decoder = new Mail_mimeDecode($mailtext);
        
$structure $decoder->decode($params);
        echo 
$structure->body;
}
?>
Der Output sieht danach aber immer noch exakt so aus, wie der "rohe mail text" in der Variable $mailtext.

Hat schon jemand mit dieser PEAR Extension gearbeitet?
 
Alt 06.05.2005, 03:36  
Gast
 
Beiträge: n/a
Standard

string imap_fetchbody ( int imap_stream, int msg_number, string part_number [, flags flags])

Hinweis:
part_number aus imap_fetchstructure +1 = part_number
Dies rauszukriegen, hat echt genervt.
 
Alt 06.05.2005, 12:34  
Gast
 
Beiträge: n/a
Standard

Hallo meikel

das löst aber nicht das mime multipart problem, oder?
 
Alt 06.05.2005, 12:42  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von NewBert
das löst aber nicht das mime multipart problem, oder?
Ich löse es damit. Du mußt die Parts der Reihe nach ermitteln und mit imap_fetchbody(..... Partnummer+1) zum Konvertieren rauslutschen.

Wenn Du Dir das alles mal genau anguckst -
print_r($imap_object) geht mit PHP5 ganz locker -
dann kommst Du von selber drauf, wies gemacht wird.
 
Alt 06.05.2005, 13:18  
Gast
 
Beiträge: n/a
Standard

Hallo Meikel

würdest du mir deine Source zur Verfügung stellen damit ich mir das an einem funktionierenden Beispiel näher betrachten kann? Würde mir sehr helfen!! Auch gegen Bezahlung wenn du drauf bestehst. Komme sonst nicht vorwärts. Klar könnte ich mir noch wochenlang Texte durchlesen aber muss ein Projekt fertig stellen.

Gruss
NewBert
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP richtig lernen! TeazY PHP Tipps 2008 5 01.02.2008 21:50
[Erledigt] Modularisierung: Wie macht man es richtig? PHP-Fortgeschrittene 1 12.03.2006 16:00
Tabellenlayout wird nicht richtig angezeigt PsychoEagle HTML, Usability und Barrierefreiheit 3 21.11.2005 13:02
[Erledigt] Lieg ich da richtig? Datenbanken 4 31.08.2005 13:21
[Erledigt] VARIABLEN WERDEN NICHT RICHTIG VERARBEITET!!!! HILFE PHP Tipps 2005-2 6 02.07.2005 18:32
PHP funktioniert nicht richtig?! PHP Tipps 2005-2 26 11.06.2005 09:05
Formmailer geht bei der email zuschickung nicht richtig PHP Tipps 2005 2 02.06.2005 22:54
code-schnipsel -> tabelle richtig erstellen, aber wie? PHP Tipps 2005 1 08.05.2005 03:45
[Erledigt] Bilder werden nicht richtig angezeigt PHP Tipps 2005 31 30.04.2005 18:29
Mail mit imap_body richtig anzeigen? PHP-Fortgeschrittene 1 02.02.2005 16:46
Variable wird nicht richtig übergeben PHP Tipps 2005 17 16.01.2005 16:51
[Erledigt] mailform für mail+name geht nicht richtig PHP Tipps 2004 3 26.10.2004 12:42
[Erledigt] imap_body RICHTIG ausgeben (mit allen Sonderzeichen usw.) PHP-Fortgeschrittene 3 08.09.2004 02:33
[Erledigt] Perl richtig installiert oder falsch ? testen aber wie ? c01001 Server, Hosting und Workstations 2 31.08.2004 22:37
Formular, welches prüft, ob eingegebene Antwort richtig.... PHP Tipps 2004 10 15.08.2004 22:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mail_mimedecode, imap_body, http://www.php.de/php-tipps-2007/22484-erledigt-imap_body-richtig-decoden-mimetypen-mail_mimedecode.html, imap_body decodieren, imap_body decode, echokodierung, php mail_mimedecode, php imap_body decodieren, php decode imap_body, php imap_fetchbody multipart emails, imap_body html, php mime type decodierung, imap_body beispiel, imap_body format, mail_mimedecode beispiel, imap_fetchbody umlautprob, php base64 imap_qprint, php imap_fetchbody umlaute, imap_qprint content-transfer-encoding, echocodierung

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.