[PHP] *.eml als los bestand openen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met een email module voor een bedrijf om die te integreren met hun interne software pakket (Dit is zijn in feite losse modules (die gemaakt worden met PHP), gekoppeld aan een MySql database).

Het email programma is gebaseerd op SquirrelMail. Het zodanig omgebouwd dat het vooral aan de layout is aangepast. (bijv. wij werken hier met tables, SquirrelMail met frames).

Nu is het de bedoeling dat emails gekoppeld kunnen worden aan projecten.
Ontvangen emails kan ik nu dan ook in de database opslaan (eig gegevens van de email), en de email wordt gekopieerd vanuit de (temporary) data folder (van SquirrelMail) naar een folder die bij het project hoort. Het wordt als een .eml opgeslagen.

Als ik een email opsla gebruik ik de de functie van SM die van een email een attachment maakt (forward as attachment). Ik kwam erachter dat als een email als attachment wordt 'ge-forward' dat SM die email opslaat in de data folder. Dit bestand kopieer ik dan naar een project folder.

Nu heb ik het probleem dat ik dit eml bestand niet kan openen. Ik kan iig niet openen op de manier zoals SquirrelMail de emails opent. Het lukt natuurlijk wel met fopen() en fread(), maar dat is niet de bedoeling :+. Het zou zo geopend moeten worden als een nieuwe email. Al onze emails worden in een nieuw scherm geopend (als erop wordt geklikt), dus moet dat losse emailbestand ook in een nieuw scherm worden geopend.
En het is geen optie om het bestand in MS Outlook te openen want daarom maak ik deze module :P

Als ik een email opsla gebruik ik de de functie van SM die van een email een attachment maakt (forward as attachment). Ik kwam erachter dat als een email als attachment wordt 'ge-forward' dat SM die email opslaat in de data folder. Dit bestand kopieer ik dan naar een project folder.

Ik weet dat het te maken heeft met de STREAM van SquirrelMail. Als een attachment als .eml wordt meegestuurd lukt het nl wel. Dan zit het in die STREAM en kan je het openen met variabelen zoals $passed_id en $passed_ent_id.

Ik heb gezocht naar een eml reader, maar ik kon niets vinden.
Weet één van jullie een oplossing, of moet ik het bestand anders opslaan, zodat het makkelijker te lezen is.

Ik zou het ook zelf misschien wel kunnen schrijven , maar ik zou niet weten hoe je de attachments uit een .eml moet halen...(met fread krijg je nl allemaal rare tekens)

Ik hoop dat dit een beetje duidelijk is...de post is iets langer geworden dan ik dacht :P

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Je wil die .eml file gewoon openen in SM? Dat kan denkik alleen als je server dezelfde pc is als waar SM op staat, waardoor je middels een shell commando die mail kan openen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NMe84 schreef op 07 juni 2004 @ 11:24:
Je wil die .eml file gewoon openen in SM? Dat kan denkik alleen als je server dezelfde pc is als waar SM op staat, waardoor je middels een shell commando die mail kan openen.
hmm...dat is niet het geval...we hebben een aparte IMAP mail server...wat tevens de file-server is. Om de server wat te minder te belasten hebben ze hier gekozen om de database op een ander workstation te laten draaien. Naast de database staat hier dan ook een licencie-server op voor diverse programma's.

Op de server zelf draait linux (geen idee welke versie, ook niet van de IMAP mail server). Op de 'database-server' staat Win2k met apache (en mysql en php uiteraard ;))

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hmm, je kan via PHP iig op de client geen programma's starten. Wat je wel kan doen is een force-download header setten en dan die eml pagina versturen, misschien dat SM hem dan gewoon opent?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Die forward as attachment functie heb ik geschreven en je kan die message/rfc822 attachments inderdaad niet weergeven zoals de andere berichten weergegeven worden.

Dat kan pas wanneer ze in een email attached zijn die op de imap server staan. SquirrelMail maakt namelijk gebruik van de BODYSTRUCTURE van een email die bij een imap server opgevraagd kan worden. De mime structuur wordt dan ontleed op de imap server en de teruggeven bodystructure wordt geparsed en in een Message object gestopt. De passed_id en passed_ent_id worden gebruikt om het juiste mimepart uit dat Message object weer te geven. Passed_ent_id wijst naar message/rfc822 attachments.

Van een losse file met een email bericht erin is nog geen bodystructure bekend en dus kan squirrrelmail daar niks mee.

Wat je zou kunnen doen is zelf een mimeparser schrijven en het resultaat op in zo'n Message object stoppen zodat je het wel gewoon weer kan geven (er zijn meerdere aanpassingen nodig).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@NMe84:

Ik begrijp niet precies wat je bedoeld.

Het is de bedoeling dat de email op dezelfde manier wordt geopend als een ander document (bijv. word doc). Dat gaat via een link. Daarmee wordt een ander php bestand geopend en is er een id meegegeven. Met dat id kan de path waar het bestand staat worden gelezen (uit de db). Daarna wordt het geopend met header(Location: $path) ($path is daarvoor nog door de php functie realpath() geweest)...

Daarmee open ik een .doc, maar ik zou niet weten of je op zo'n manier naar read_body zou kunnen linken (misschien extra script ertussen).
read_body.php is het bestand, waarmee SM zijn emails uitleest.

@stekkel:

Heeft dat message/rfc822 een vaste waarde? volgens mij as dat $passed_ent_id=2. En misschien kan je mij dan ook nog vertellen hoe ik naar het Message Object kan schrijven?

[ Voor 16% gewijzigd door Verwijderd op 07-06-2004 13:34 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Wanneer je een snelle hack wil dan zou ik het bestand met behulp van append in een folder op de imap server zetten. Met behulp van de UIDNEXT waarde die returned wordt bij eens select weet je dan de UID waarde van het bericht en kan je het bericht in read_body.php openen door in de url query de mailbox=jouwfoldernaam en passed_id=jouwUID mee te geven.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Verwijderd schreef op 07 juni 2004 @ 13:24:

Heeft dat message/rfc822 een vaste waarde? volgens mij as dat $passed_ent_id=2. En misschien kan je mij dan ook nog vertellen hoe ik naar het Message Object kan schrijven?
Een message/rfc822 attachment heeft geen vaste referentie in de vorm van $passed_ent_id. Die waardes zijn afhankelijk van de bodystructure van een bericht.

De code voor het vullen van een Message Object staat in class/mime/Message.class.php

Maar ik kan je nu al vertellen dat het niet makkelijk zal zijn om dat object te vullen.
Pagina: 1