[PHP] Bijlage e-mail kopiëren naar folder op server (IMAP)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hey,

Al een tijdje ben ik op zoek naar de mogelijkheid om bijlages die in een e-mail op de server staan te kunnen kopiëren naar een map op de server. Ik wil namelijk dat men via het beheerdersysteem bijlages kunnen ophalen en kunnen koppelen aan personen in de database.

Nu weet ik wel hoe je bijlages kunt tonen middels php en ook het downloaden is geen probleem (zie http://www.linuxscope.net/articles/mailAttachmentsPHP.html), alleen is het mij een raadsel hoe ik een bestand in een bijlage automatisch kan kopiëren naar een map op de server.

De functie die ik gebruik om attachments van een bericht op te vragen is (dit is een testpagina):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php

function extract_attachments($connection, $message_number) {
   
    $attachments = array();
    $structure = imap_fetchstructure($connection, $message_number);
   
    if(isset($structure->parts) && count($structure->parts)) {
   
        for($i = 0; $i < count($structure->parts); $i++) {
   
            $attachments[$i] = array(
                'is_attachment' => false,
                'filename' => '',
                'name' => '',
                'attachment' => ''
            );
           
            if($structure->parts[$i]->ifdparameters) {
                foreach($structure->parts[$i]->dparameters as $object) {
                    if(strtolower($object->attribute) == 'filename') {
                        $attachments[$i]['is_attachment'] = true;
                        $attachments[$i]['filename'] = $object->value;
                    }
                }
            }
           
            if($structure->parts[$i]->ifparameters) {
                foreach($structure->parts[$i]->parameters as $object) {
                    if(strtolower($object->attribute) == 'name') {
                        $attachments[$i]['is_attachment'] = true;
                        $attachments[$i]['name'] = $object->value;
                    }
                }
            }
           
            if($attachments[$i]['is_attachment']) {
                $attachments[$i]['attachment'] = imap_fetchbody($connection, $message_number, $i+1);
                if($structure->parts[$i]->encoding == 3) { // 3 = BASE64
                    $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                }
                elseif($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
                    $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                }
            }
           
        }
       
    }
   
    return $attachments;
   
}

$mailbox = @imap_open("{domein.nl/imap4}INBOX","e-mailadres","wachtwoord");

$index = imap_msgno($mailbox, $_GET['id']);


$attachments = extract_attachments($mailbox, $index);

$numb = 1;
for($i=0;$i<count($attachments);$i++) {
    if($attachments[$i]['is_attachment']) {
    echo 'Bijlage '.$numb.': '.$attachments[$i]['name'].'<br />';
    $numb++;
    }
}
?>


Heeft iemand een idee hoe ik een bijlage kan kopiëren naar een map op de server?

Alvast bedankt voor je reactie!

Acties:
  • 0 Henk 'm!

Verwijderd

$attachments[$i]['attachment'] lijkt mij de inhoud van het deel (part) van het bericht. Deze kan je dan natuurlijk wegschrijven met www.php.net/fopen of www.php.net/file_put_contents

Edit: Je kan ook gebruik maken van een library: http://framework.zend.com...ml#zend.mail.read-message Zo zit je namelijk niet vast aan imap, maar kan je bijv. ook maildir gebruiken dat een stuk sneller is (niet gebenchmarkt)!

[ Voor 41% gewijzigd door Verwijderd op 04-09-2009 18:59 ]


Acties:
  • 0 Henk 'm!

  • radem205
  • Registratie: Juni 2002
  • Laatst online: 02-02-2022
Hartelijk dank voor je reactie. Ik voel me een beetje dom nu :(. Maar het is gelukt! De snelheid is niet heel erg belangrijk, en ik merk dat het nu al erg snel gaat dus ik ben tevreden :).

Bedankt!