Bonjour à tous,

Voilà, j'ai un script qui déplace des pièces jointes d'une boîte mail vers un dossier et cela fonctionne parfaitement pour la quasi totalité des mails, sauf lorsque le mail est structuré comme ceci, il ne "voit" pas de pièces jointes:

Content-Type: application/octet-stream;

name="piècejointe.xml"

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

Je vous joins une partie du script en espérant que vous pourrez m'aider.

Merci d'avance à tous,


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
<?php
 
function getFileExtension($fileName){
   $parts=explode(".",$fileName);
   return $parts[count($parts)-1];
}
 
 
  // Connection sur le boîte mail
$server = '{192.168.00.0:143/novalidate-cert}INBOX';
    $username = 'toto';
    $password = 'titi';
 
 
 
 
    $imap = imap_open($server, $username, $password) or die("imap connection error");
 
$message_count = imap_num_msg($imap);
for ($m = 1; $m <= $message_count; ++$m){
 
    $header = imap_header($imap, $m);
 
    $email[$m]['from'] = $header->from[0]->mailbox.'@'.$header->from[0]->host;
    $email[$m]['fromaddress'] = $header->from[0]->personal;
    $email[$m]['to'] = $header->to[0]->mailbox;
    $email[$m]['subject'] = $header->subject;
    $email[$m]['message_id'] = $header->message_id;
    $email[$m]['date'] = $header->udate;
 
    $from = $email[$m]['fromaddress'];
    $from_email = $email[$m]['from'];
    $to = $email[$m]['to'];
    $subject = $email[$m]['subject'];
 
    echo $from_email . '</br>';
    echo $to . '</br>';
    echo $subject . '</br>';
 
 
 
    $structure = imap_fetchstructure($imap, $m);
 
    $attachments = array();
    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($imap, $m, $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']);
                }
            }
        }
    }
 
 
    if(count($attachments)!=0){
        foreach ($attachments as $key){
            if($key['is_attachment']==1){
    file_put_contents($key['filename'], $key['attachment']);
 
...
Si vous avez besoins de plus de renseignements, je suis à votre entière disposition

PS : Si je renvois ce mail avec Outlook, le script "voit" bien la pièce jointe et la déplace correctement.