php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 12-07-2006, 10:52
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard Probleme mit e-Mails

Hallo!

Ich versuch es doch mal, weil mir eine Suche im Forum und auch die Suche im Internet bislang nichts gebracht haben.

Ich möchte gern mittels PHP e-Mails von einem POP3-Postfach abrufen und auslesen. Dies habe ich bisher auch (wenn auch modifiziert) hinbekommen.
Nun stehe ich vor dem Problem, dass eine Mail ja auch über Anhänge verfügen kann und ich diese gern nicht nur anzeigen lassen (wenn möglich, also bei einem Bild bspw.), sondern auch - wenn es mehrere sind - einzeln auf diese zugreifen und diese abspeichern möchte.

Die IMAP-Funktionen sind mir IMHO soweit bekannt, dass ich obiges bereits geschafft habe, jedoch bereiten mir die Mailanhänge sehr viele Schwierigkeiten. Ich weiß leider nicht, wie ich....
1. überprüfen lassen kann, ob eine Mail über Attachments verfügt oder nicht.
2. diese dann anzeigen - geschweige denn abspeichern kann.

Mit imap_fetchstructure und co. bin ich bis dato leider nicht weitergekommen. Ferner gibt es darüber wenig in Foren und im gesamten Netz - teilweise sind IMAP-Funktionen bei php.net gar nicht oder nur unzureichend dokumentiert.


Lange Rede, kurzer Sinn: Könnte vielleicht jemand so nett sein und mir vielleicht etwas konkreter nahelegen, wie ich mein Problem lösen könnte?


Vielen Dank schonmal im Voraus
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 12-07-2006, 20:30
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Versuchen kann man es ja mal.
PHP-Code:
// irgendwie mußt du $mbox belegen ...
// und $msgno ... solltest du alles schon haben
$struct imap_fetchstructure($mbox,$msgno);
$contentParts count($struct->parts);
if (
$contentParts >= 2) {
    for (
$i=2$i<=$contentParts$i++) {
        
$att[$i-2] = imap_bodystruct($mbox$msgno$i);
        if (
$att[$i-2]->parameters[1]->value != "") {
             echo 
'<a href="download.php?msg='.$msgno.'&att='.($i-2).'">'
                
.$att[$i-2]->parameters[1]->value.'</a><br>';
        }    
    }

download.php:
PHP-Code:
// irgendwie mußt du $mbox belegen ...
// und für $att das selbe Spiel wie oben ...
$attName $att[$_GET['att']]->parameters[0]->value;
$attType strrev(substr(strrev($attName), 04));
$attContent imap_fetchbody($mbox$_GET['msg'], $_GET['att']+2);

switch (
$attType) {
    case 
'.avi'$ctype 'video/avi'; break;
    case 
'.doc'$ctype 'application/msword'; break;
    case 
'.zip'$ctype 'application/zip'; break;
    case 
'.xls'$ctype 'application/vnd.ms-excel'; break;
    case 
'.gif'$ctype 'image/gif'; break;
    case 
'.jpg':
    case 
'jpeg'$ctype 'image/jpeg'; break;
    case 
'.wav'$ctype 'audio/wav'; break;
    case 
'.mp3'$ctype 'audio/mpeg3'; break;
    case 
'.mpg':
    case 
'mpeg'$ctype 'video/mpeg'; break;
    case 
'.rtf'$ctype 'application/rtf'; break;
    case 
'.htm':
    case 
'html'$ctype 'text/html'; break;
    
/* weitere Content-Types nach Belieben */
    
default: $ctype 'application/octet-stream';
}   
header ('Content-Type: '.$ctype); 
header ("Content-Disposition: attachment; filename=$attName; size="
    
.(strlen($attContent)-1).';'); 
    
if (
substr($ctype04) == 'text') {
    echo 
imap_qprint($attContent);
} else {
    echo 
imap_base64($attContent);

Völlig ungetestet.

Geändert von onemorenerd (12-07-2006 um 20:35 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 13-07-2006, 10:04
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

Hey vielen Dank erst einmal.....


nachdem ich das ausprobiert habe, hab ich doch die ein oder andere Frage dazu - selbst, wenn du ja gesagt hattest, es wäre komplett ungetestet.

PHP-Code:
$contentParts count($struct->parts); 
Wenn ich eine e-Mail komplett ohne Anhänge schicke, habe ich 0 parts.
Wenn ich eine e-Mail mit einem Anhang schicke, habe ich 2 parts.
Wenn ich eine e-Mail mit 2 Anhängen schicke, habe ich 3 parts usw...

Woher kommt denn der Sprung zwischen 0 und 2 parts und was bedeutet denn "parts" in dem Sinne eigentlich? Die Trennung zwischen dem Text und dem Anhang kann es ja nicht sein, oder?
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!

Geändert von chefkochbln (13-07-2006 um 10:22 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 13-07-2006, 11:18
Lengen1971
 Registrierter Benutzer
Links : Onlinestatus : Lengen1971 ist offline
Registriert seit: Oct 2003
Beiträge: 57
Lengen1971 ist zur Zeit noch ein unbeschriebenes Blatt
Lengen1971 eine Nachricht über ICQ schicken
Standard

Hoi,

zu Parts könnt ich dir sagen, dass eine Email mit Attachment eine mulitpart/mixed Mail ist (steht im Header). Die Teile(=Parts: text, html-text, attachments) sind mit einer "Boundary" voneinander getrennt.

Ich könnte mir vorstellen, dass 0 bedeutet, eine Mail OHNE mulitpart/mixed. Warum da jetzt ein Sprung drin ist, sorry, weiß ich nicht.

so far...
Mit Zitat antworten
  #5 (permalink)  
Alt 13-07-2006, 16:04
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

Hmm......

also bis jetzt konnte ich mir den Body der Mail auslesen lassen. Dann habe ich so etwas wie das:

Zitat:
This is a multi-part message in MIME format.
--------------090405090708000100020506
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit


Hier steht der Text der E-Mail

--------------090405090708000100020506
Content-Type: image/jpeg;
name="logo.JPG"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="logo.JPG"

/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAASUkqAAgAAAABAABRBAABAAAAAAAAAAAA
AAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcp
LDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABRAOsDASIAAhEBAxEB/8QA
HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQID
AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6
Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QA
HwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAEC
AxEEB************BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5
OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOk
paanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oA

........
Kann ich denn mit dem Buchstabengewäsch etwas anfangen? Ich bin ja der Meinung, es handelt sich um den Anhang, der lediglich codiert ist.
Also wenn ihr mir da zustimmt, dann könnte man doch rein theoretisch aus dem Body den Dateinamen bekommen, den codierten Anhang in einer Datei speichern (die Dateiendung kennt man ja dann) und dann irgendwie als Datei ausgeben, oder was meint ihr??

Klingt eventuell ziemlich umständlich - gerade auch, wenn mehrere Dateien angehangen sind - aber eine Möglichkeit wäre es doch oder??
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
  #6 (permalink)  
Alt 13-07-2006, 19:25
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Kann ich denn mit dem Buchstabengewäsch etwas anfangen?
Das ist das Attachment, das mit base64_encode() vor dem Versenden bearbeitet wurde. Wenn du jetzt dieses Datengewurstel sauber rausschneidest, base64_decode() drüber lässt und als logo.jpg speicherst, dann hast du das Attachment wie gewünscht.

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #7 (permalink)  
Alt 13-07-2006, 20:44
mäander_
 Junior Member
Links : Onlinestatus : mäander_ ist offline
Registriert seit: Jul 2006
Beiträge: 106
mäander_ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

kannst als alternative ein webmail programm anschauen dh danach googeln, da es anscheinend kein php modul gibt, welches email 'entschlüsselt' (kein phpmailer hoch -1). zb ilohamail, beemailphp, unter horde gibt es auch eines.

die theoretischen grundlagen sind in einigen rfcs, 2822, 2821, 1521 (letzteres irrtum vorbehalten). Ich denke das selbständige decodieren gemäss den normen ist in einigen Tagen selbstprogrammiert dh nicht so riesig.

der sprung von null nach zwei erklärt sich damit, dass ohne attachments das mail kein multipart ist, mit attachment ist es ein multipart.
Mit Zitat antworten
  #8 (permalink)  
Alt 13-07-2006, 22:39
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

Hey danke erst einmal für die Antworten.

@jahlives:
Hm, das hilft mir weiter - vielen Dank. Ich werd das mal morgen ausprobieren - heute fehlt mir gänzlich die Lust *lach*

@mäander_:
Gegooglet hab ich die letzten Tage *lach* - und ich finde, dass viele PHP-Mailclients aufwendig programmiert worden sind oder gar eigene IMAP-Klassen implementiert haben, bei denen man dann kaum noch durchsteigt.

Ich habe jedoch einen Link gefunden (hab ich leider auf Arbeit gespeichert), in dem jemand genau die Vorgehensweise mit Quellcode beschreibt und da bin ich vorhin schon etwas weiter gekommen. Ich probier das mal morgen aus und zur Not muss ich halt versuchen alles zu zerschnippel und mir da was überlegen.

Wie auch immer - vielen Dank erst einmal.
Ich hoffe, es klappt alles soweit - wenn nicht würd ich mich gern nochmal melden....
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
  #9 (permalink)  
Alt 14-07-2006, 11:28
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

So...ich poste hier nochmal den Link, den ich im Post darüber angesprochen hatte.
Er funktioniert tabellos, Kevin Steffer spricht mir nebenbei bemerkt vollkommen aus der Seele *gg*
hier klicken

Auch die von ihm angesprochenen Snippets funktionierern bis auf ganz kleine Korrekturen super! - Das einzige Problem was sich nur noch stellt ist die Tatsache, dass ein Attachment (nehmen wir an, es ist eine .GIF-Datei) halt als "Quellcode" angezeigt wird und leider nicht als Bild an sich.

Aber ich bin weiter am probieren, wie man das umgehen, bzw. lösen kann.
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
  #10 (permalink)  
Alt 15-07-2006, 21:18
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von jahlives
Das ist das Attachment, das mit base64_encode() vor dem Versenden bearbeitet wurde. Wenn du jetzt dieses Datengewurstel sauber rausschneidest, base64_decode() drüber lässt und als logo.jpg speicherst, dann hast du das Attachment wie gewünscht.
Hmm....wird jede Mail mit 64bit codiert? - Okay, das ist eine rhetorische Frage. Ich hatte das mal bei einer Mail ausprobiert, den Text komplett sauber abgeschnitten (wie in dem angeführten Beispiel) und dann den Inhalt in die entsprechende Datei (test.jpg) geschrieben.
Bei der Anzeige musste ich jedoch feststellen, dass das ganze nicht geklappt hat - also bei der Codierung nochmal nachgeschaut und da musste ich feststellen, dass diese Mail mit 8bit codiert wurde.
Zitat:
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 8bit
Wird denn jede Mail, die ich bspw. vom Mailclient Thunderbird verschicke gleich codiert? - Also mal anders formuliert: Ist die Codierung abhängig von dem benutzten Mailclient oder wonach richtet sich das?


Sorry für das Nachfragen, aber bislang bin ich durch eure Tips schon ziemlich weit gekommen *grml* - ein kleiner Schritt fehlt mir halt noch, bis das Ergebnis technisch mal ein wenig funktioniert :-)

Danke!!
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
  #11 (permalink)  
Alt 15-07-2006, 21:35
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Genaugenommen ist es in aller Regel vom Absender bzw. dessen Mailclient abhängig, denn der schnürt die Mail zusammen. Jeder MTA auf dem Weg in deine Inbox darf zwar Attachments de- und wieder (anders) encodieren, ohne gegen irgendein RFC zu verstoßen. Aber das macht natürlich keiner außer vielleicht dem letzten in der Kette, der die Mail vorm Speichern in deiner Inbox auf Spam prüfen möchte.

Ist auch völlig egal, wie was verpackt wurde. In den Headers steht, wie man es auszupacken hat - hast du ja hier schon zweimal gepostet. Mehr mußt du nicht wissen.

Mein Ansatz da oben war insofern auch an der Realität vorbei, denn es hat absolut nichts zu sagen, welchen Dateityps ein Attachment ist.

Geändert von onemorenerd (15-07-2006 um 21:38 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 15-07-2006, 21:45
chefkochbln
 Junior Member
Links : Onlinestatus : chefkochbln ist offline
Registriert seit: Feb 2005
Beiträge: 53
chefkochbln ist zur Zeit noch ein unbeschriebenes Blatt
chefkochbln eine Nachricht über ICQ schicken
Standard

Hey danke für die schnelle Antwort.... klingt wohl doch so, als ob sich das ganze ein wenig komplizierter gestaltet. Deiner Antwort zufolge müsste man ja dann bei jeder eintreffenden Mail prüfen, wie sie codiert wird und dann die einzelnen Anhänge (wenn mehrere vorhanden) erst einmal temporär speichern und dann von Mail zu Mail ggf. ne andere Codierungsmethode wählen.....

Naja, hat ja keiner behauptet, dass es 'n leichter Weg wäre

Trotzdem danke!!



Ach ja, btw: Aber einzelne, bzw. mehrere Anhänge sind nicht unterschiedlich codiert, ne? Also pro Mail bestimmte Codierung, ne? (Nur nochmal, um sicher zu gehen)
__________________
Geht nich, gibts nich!
God is real...unless declared as integer!
Mit Zitat antworten
  #13 (permalink)  
Alt 15-07-2006, 21:52
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von chefkochbln
Ach ja, btw: Aber einzelne, bzw. mehrere Anhänge sind nicht unterschiedlich codiert, ne? Also pro Mail bestimmte Codierung, ne? (Nur nochmal, um sicher zu gehen)
Doch, das kann sein. Jedes Attachment einer Mail kann anders kodiert sein.
Aber der Programmieraufwand hält sich in Grenzen: Header fischen, analysieren und das geeignete Decoding anwenden. Also explode, irgendwas mit preg_* und ein switch.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:01 Uhr.