Ticketsystem was Emails per POP holt und den Anhang zu einem Ticket uploaded

Purdey

Erfahrenes Mitglied
Hallo zusammen,

ich habe mal eine Frage, kann mir jemand sagen wie bspw. OTRS den IMPORT von Mails übernimmt und damit ganze Tickets mit Anhang erstellt, bzw. die Anhänge dem Ticket zuordnen kann?

Ich weiß das OTRS Perl ist aber vielleicht ist das ja mit PHP auch möglich.

Ich habe eine Formular für die Neuerstellung eines Tickets, übermittelt werden hier:

Kategorie, Beschreibung (kuz + Lang), Ersteller + Anhang.

Gern würde ich jetzt auch dem Ersteller die Möglichkeit schaffen eine Email an ticket@ab.de zu senden welche dann auch die Informationen ermittelt und vorallem die Datei abhängt und irgendwie zum upload übergibt.

Ich hoffe Ihr versteht was ich meine.
 
Du brauchst in diesem Falle auf ab.de ein Cron-Job-Script (oder etwas vergleichbares), das in bestimmten Intervallen den Post-Eingang vom user "ticket" überprüft. Es gibt dafür diverse Hilfsklassen (oder auch funktionale Scripts, wenn dir OOP nicht liegt). Hier ein paar Beispiele:

http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html
http://riobautista.wordpress.com/2008/01/08/accessing-a-pop3-mailbox-using-php/
http://www.codewalkers.com/c/a/Email-Code/Generic-POP3-Class/

Falls du jedoch IMAP verwendest, kannst du entweder die IMAP-Funktionen von PHP verwenden oder auch hier wieder diverse Hilfsklassen verwenden:

http://code.google.com/p/php-imap/
http://www.phpclasses.org/package/6256-PHP-Retrieve-messages-from-an-IMAP-server.html

Hier auf tutorials.de gibt es sogar einen Artikel zum Thema IMAP+Attachements:

http://www.tutorials.de/content/187-emails-per-imap-mysql-db-und-anhaenge-speichern.html
 
Hey Saftmeister, vielen Dank für die Antwort. Werde das alles mal im Detail sichten.
Doch wie kann ich mir die Übergabe das Anhanges an ein Formular vorstellen?

Oder wird erst das Ticket erstellt und der Anhang nachträglich übermittelt?

Wird die Datei auf dem Server wo der Cronjob läuft temporär gespeichert und dann wieder aufgegriffen?
 
Warum willst du das an ein Formular weiter leiten? Die Email kann doch geparst und zusammen mit dem Anhang direkt in die Datenbank übernommen werden. Dafür braucht es kein weiteres Formular. Was soll denn mit dem Ticket passieren, nach dem es an ab.de angekommen ist?

Was du dann noch brauchst, ist eine Seite, die dir den Inhalt aus der Datenbank anzeigt, also alle Tickets auflistet und bspw. bei Klick auf ein Ticket die Details anzeigt. In der Detail-Seite kannst du dann den Anhang als Download anbieten.
 
Okay also bisher verfahre ich so das ich eine Email habe und mittel C# abhole und dann den Body als Beschreibung (lang) setze, den Betreff als Beschreibung (kurz), den User lese ich aus der Email bzw. gleiche Ihn ab.

Eine Seite zum Anzeigen exisitert bereits. Eigentlich existiert alles nur eben keine Chance an ticket@ab.de zu senden und die Email zu einem Ticket zu machen.

Bei der Erstellung über das Formular wird u.a. noch ein bestimmter Personenkreis informiert, wenn ein solches Ticket eingeht.

Gut gehen wir mal davon aus, ich schreibe es direkt in die Datenbank. Wie "zaubere" ich den Anhang in die Datenbank. Aktuell gibt es ein tab_ticket und eine tab_ticket_attachment (Referenziert übert ticket_id).


In der Mail bekomme ich ja einen base64 Codierten String, diesen wandle ich um.

Und dann?
 
Kommt darauf an. Wie sieht die Struktur von "tab_ticket_attachment" denn aus? Enthält es eine Spalte für das Speichern des absoluten Pfades im Dateisystem (char/varchar/text/string halt) oder Typ BLOB (also Binär-Daten)? Abhängig davon müsstest du so vorgehen:

1. Spalte ist vom Typ "Zeichenkette":
- Speichere den Anhang im Datei-System so, das der Webserver-Prozess darauf zugreifen kann.
- Dafür brauchst du einen Ordner, in dem du die Datei ablegen kannst, einen Dateinamen und die Rechte neue Dateien anzulegen und zu befüllen.
- Abhängig davon, welche Art und Weise verwendet wird, auf die Emails zuzugreifen (POP/IMAP) gibt es natürlich unterschiedliche Wege, das Attachment aus der Mail auszulesen - hier kann ich schlecht Annahmen treffen, da ich nicht weiß, was du verwenden wirst.
- Zum Schreiben der Datei aus dem Attachment wirst du üblicherweise fopen/fwrite/fclose verwenden (nur eins verlinkt, die andern Befehle findest du auch im Handbuch).
- Wenn du die Datei geschrieben hast, hast du ja auch den Pfad zur Datei, den du in "tab_ticket_attachement" abspeichern kannst.

2. Spalte ist vom Typ "Binärdaten"
- Lese das Attachment in eine Variable.
- Erstelle ein Prepared-Statement (wenn das dein präferierter Datenbank-Treiber zulässt, ansonsten in den INSERT-Query einbauen)
- Führe das Statement / den Query aus, um das Attachment in die Tabellenspalte zu speichern.
 
Zurück