Oprettet man. d. 10. september 2012 kl. 10:15:34

jensenxp
jensenxp (15.700 point. Point ude: 30)

åbne mail og gemme vedhæftet fil, samt parse xls

Hej
Jeg modtager min elmåler aflæsning ugentligt i et excel regne ark og kunne godt tænke mig et script som kunne læse mail, finden den rigtige, læse excel filen og præsenterer den i en html tabel med lidt ekstra regning, men går fuldstændigt over mine evner. Er der nogen der kan hjælpe lidt.

Skrevet man. d. 10. september 2012 kl. 10:42:04| #1

j-j
j-j (19.400 point)
Det er ikke noget man lige laver på 20 minutter.

Har du spurgt afsenderen om det er muligt at få i et andet format?

Skrevet man. d. 10. september 2012 kl. 11:13:02| #2

ronols
ronols (25.011 point)
olsensweb.dk/
prøv at google php mail save attachment
prøv at google php excel reader
der må være noget du kan starte med der

Skrevet man. d. 10. september 2012 kl. 15:49:20| #3

moddi100
moddi100 (11.597 point)
php.net har nogle gode eksempler på hvordan man åbner en mailbox via f.eks. imap og så henter listen over emails. Hedder mailen det samme hver gang, er det jo bare at gå listen igennem. Se her funktionen imap_headers()

Som ronols siger kan du sikkert google dig frem til en løsning der også downloader en attachment fra mailen.

Med hensyn til håndtering af excel-filen anvendte jeg for nogle år tilbage projektet "Spreadsheet_Excel_Reader", selvom jeg dog ikke ved om det stadigvæk eksisterer. Men det var i hvert fald uhyre simpelt at anvende efter at have læst deres introduktion.

Skrevet tor. d. 13. september 2012 kl. 12:38:35| #4

jensenxp
jensenxp (15.700 point)
dropper du et svar, for takke være dine søge tip fik jeg bakset dette sammen (så skal der bare finpudses):

<?php

require_once 'excel_reader2.php';

$server = '{mail.****.****/pop3:110}';
// and put your login and password here
$login = '****';
$password = '****';

$connection = imap_open($server, $login, $password);

// the number in constructor is the message number
$emailMessage = new EmailMessage($connection, 1);
// set to true to get the message parts (or don't set to false, the default is true)
$emailMessage->getAttachments = true;
$emailMessage->fetch();

//could drop file_put, but want to keep org. spreadsheet and want to add more to $data after

file_put_contents('el.xls', $emailMessage->attachments[0]['data']);

$data = new Spreadsheet_Excel_Reader("el.xls");

echo $data->dump(true,true);

imap_close($connection);
exit;

class EmailMessage {

    protected $connection;
    protected $messageNumber;
   
    public $bodyHTML = '';
    public $bodyPlain = '';
    public $attachments;
   
    public $getAttachments = true;
   
    public function __construct($connection, $messageNumber) {
   
        $this->connection = $connection;
        $this->messageNumber = $messageNumber;
       
    }

    public function fetch() {
       
        $structure = @imap_fetchstructure($this->connection, $this->messageNumber);
        if(!$structure) {
            return false;
        }
        else {
            $this->recurse($structure->parts);
            return true;
        }
       
    }
   
    public function recurse($messageParts, $prefix = '', $index = 1, $fullPrefix = true) {

        foreach($messageParts as $part) {
           
            $partNumber = $prefix . $index;
           
            if($part->type == 0) {
                if($part->subtype == 'PLAIN') {
                    $this->bodyPlain .= $this->getPart($partNumber, $part->encoding);
                }
                else {
                    $this->bodyHTML .= $this->getPart($partNumber, $part->encoding);
                }
            }
            elseif($part->type == 2) {
                $msg = new EmailMessage($this->connection, $this->messageNumber);
                $msg->getAttachments = $this->getAttachments;
                $msg->recurse($part->parts, $partNumber.'.', 0, false);
                $this->attachments[] = array(
                    'type' => $part->type,
                    'subtype' => $part->subtype,
                    'filename' => '',
                    'data' => $msg,
                    'inline' => false,
                );
            }
            elseif(isset($part->parts)) {
                if($fullPrefix) {
                    $this->recurse($part->parts, $prefix.$index.'.');
                }
                else {
                    $this->recurse($part->parts, $prefix);
                }
            }
            elseif($part->type > 2) {
                if(isset($part->id)) {
                    $id = str_replace(array('<', '>'), '', $part->id);
                    $this->attachments[$id] = array(
                        'type' => $part->type,
                        'subtype' => $part->subtype,
                        'filename' => $this->getFilenameFromPart($part),
                        'data' => $this->getAttachments ? $this->getPart($partNumber, $part->encoding) : '',
                        'inline' => true,
                    );
                }
                else {
                    $this->attachments[] = array(
                        'type' => $part->type,
                        'subtype' => $part->subtype,
                        'filename' => $this->getFilenameFromPart($part),
                        'data' => $this->getAttachments ? $this->getPart($partNumber, $part->encoding) : '',
                        'inline' => false,
                    );
                }
            }
           
            $index++;
           
        }
       
    }
   
    function getPart($partNumber, $encoding) {

        $data = imap_fetchbody($this->connection, $this->messageNumber, $partNumber);
        switch($encoding) {
            case 0: return $data; // 7BIT
            case 1: return $data; // 8BIT
            case 2: return $data; // BINARY
            case 3: return base64_decode($data); // BASE64
            case 4: return quoted_printable_decode($data); // QUOTED_PRINTABLE
            case 5: return $data; // OTHER
        }


    }
   
    function getFilenameFromPart($part) {

        $filename = '';

        if($part->ifdparameters) {
            foreach($part->dparameters as $object) {
                if(strtolower($object->attribute) == 'filename') {
                    $filename = $object->value;
                }
            }
        }

        if(!$filename && $part->ifparameters) {
            foreach($part->parameters as $object) {
                if(strtolower($object->attribute) == 'name') {
                    $filename = $object->value;
                }
            }
        }

        return $filename;

    }

}

Skrevet tor. d. 13. september 2012 kl. 12:39:24| #5

jensenxp
jensenxp (15.700 point)
hov, det var til ronols

Skrevet lør. d. 15. september 2012 kl. 02:30:07| #6


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Hjælp ønskes til to løkker, der driller...

Oprettet den 18. juni 2013 kl. 15.28
allandk giver 30 point for svar | Giv et svar »

Faa xml out put som en variable

Oprettet den 18. juni 2013 kl. 14.08
techboy992 giver 30 point for svar | Giv et svar »

PHP Programmør søges!

Oprettet den 18. juni 2013 kl. 00.50
Japsen giver 0 point for svar | Giv et svar »







Computerworld

Teaser billede

Test: Microsoft Surface Pro er fremtidens bærbare

Surface Pro er både en oplagt kontorkriger og en fantastisk flad følgesvend. Men den kan hurtigt komme til at koste dig dyrt. Vi har testet maskinen, som forsøger at være både tablet-pc og bærbar...

CIO

Teaser billede

Test: Microsoft Surface Pro er fremtidens bærbare

Surface Pro er både en oplagt kontorkriger og en fantastisk flad følgesvend. Men den kan hurtigt komme til at koste dig dyrt. Vi har testet maskinen, som forsøger at være både tablet-pc og bærbar...

Comon

Teaser billede

Test: Microsoft Surface Pro er fremtidens bærbare

Surface Pro er både en oplagt kontorkriger og en fantastisk flad følgesvend. Men den kan hurtigt komme til at koste dig dyrt. Vi har testet maskinen, som forsøger at være både tablet-pc og bærbar...

Channelworld

Teaser billede

Test: Microsoft Surface Pro er fremtidens bærbare

Surface Pro er både en oplagt kontorkriger og en fantastisk flad følgesvend. Men den kan hurtigt komme til at koste dig dyrt. Vi har testet maskinen, som forsøger at være både tablet-pc og bærbar...

White paper

Teaser billede

Forretningansvarlig it-arkitektur

Actionable enterprise architecture fra IBM kan hjælpe til at styre kompleksiteten og afstemme it-projekter og løsninger med forretningsmål.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 Computerworld A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger