Miriam: IMAP Mailbox abfragen und Anlagen speichern

Hallo, habe mir folgendes Script gebastelt, allerdings werden die Anlagen nicht gespeichert :-( Habe die Ausgabe mal mit angehangen ... es wäre schön, wenn jmd eine Idee hat ...

LG, Eure Miri

Das Script:

<?

set_time_limit(3000);

hostname = '';
$username = '';
$password = '';

$inbox = imap_open($hostname,$username,$password) or die('Cannot connect: ' . imap_last_error());

$emails = imap_search($inbox,'ALL');

$max_emails = 20;

if($emails) {

$count = 1;

rsort($emails);

foreach($emails as $email_number)
    {

$overview = imap_fetch_overview($inbox,$email_number,0);

$message = imap_fetchbody($inbox,$email_number,2);
        //echo "<hr>Message: ".$message."<hr>";

$structure = imap_fetchstructure($inbox, $email_number);

$attachments = array();

// if any attachments found
        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;
                        }
                    }
                }
                else
                {
                echo "Att-Nr ".$i.": keine dparameters<br>";
                }

if($structure->parts[$i]->ifparameters)
                {
                    foreach($structure->parts[$i]->parameters as $object)
                    {
                        echo "Att-Nr ".$i.": parameters<br><pre>";
                        print_r($object);
                        echo "</pre>";
                        if(strtolower($object->attribute) == 'name')
                        {
                            $attachments[$i]['is_attachment'] = true;
                            $attachments[$i]['name'] = $object->value;
                            echo $i." - parameters: ".$object->value."<hr>";
                        }
                    }
                }
                else
                {
                echo "Att-Nr ".$i.": keine parameters<br>";
                }

echo "<hr>";

if($attachments[$i]['is_attachment'])
                {
                    $attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);

/* 4 = QUOTED-PRINTABLE encoding */
                    if($structure->parts[$i]->encoding == 3)
                    {
                        $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
                    }
                    /* 3 = BASE64 encoding */
                    elseif($structure->parts[$i]->encoding == 4)
                    {
                        $attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);
                    }
                }
            }
        }

/* iterate through each attachment and save it */
        foreach($attachments as $attachment)
        {

if($attachment['is_attachment'] == 1)
            {
                $filename = $attachment['name'];
                if(empty($filename)) $filename = $attachment['filename'];

if(empty($filename)) $filename = time() . ".dat";

/* prefix the email number to the filename in case two emails
                 * have the attachment with the same file name.
                 */
                $fp = fopen($email_number . "-" . $filename, "w+");
                fwrite($fp, $attachment['attachment']);
                fclose($fp);
            }

}

if($count++ >= $max_emails) break;
    }

}

/* close the connection */
imap_close($inbox);

echo "Done";

?>

Die Ausgabe:
Att-Nr 0: keine dparameters
Att-Nr 0: parameters
stdClass Object
(
    [attribute] => CHARSET
    [value] => iso-8859-1
)
Att-Nr 1: keine dparameters
Att-Nr 1: parameters
stdClass Object
(
    [attribute] => TYPE
    [value] => text/html
)
Att-Nr 1: parameters
stdClass Object
(
    [attribute] => BOUNDARY
    [value] => Apple-Mail=_4AB0BDDA-321C-4B68-B298-41CDF3E883D6
)
Done

  1. Tach!

    Hallo, habe mir folgendes Script gebastelt, allerdings werden die Anlagen nicht gespeichert :-( Habe die Ausgabe mal mit angehangen ...

    Das ist sehr schön. Die nächste Frage ist nun, an welcher Stelle diese Ausgabewerte nicht mehr deinen Erwartungen entsprechen. Und was ist das konkrete Problem, dass du Wunsch und Wirklichkeit nicht in Übereinstimmung bringen kannst?

    dedlfix.

    1. Hallo

      Das ist sehr schön. Die nächste Frage ist nun, an welcher Stelle diese Ausgabewerte nicht mehr deinen Erwartungen entsprechen. Und was ist das konkrete Problem, dass du Wunsch und Wirklichkeit nicht in Übereinstimmung bringen kannst?

      Die Anhänge werden nicht gespeichert und in der Schleife wird auch nichts ausgegeben???

      LG, Miri

      1. Tach!

        Die Anhänge werden nicht gespeichert und in der Schleife wird auch nichts ausgegeben???

        Ich meine, dass du bezogen auf Variableninhalte und Rückgabewerte der Funktionen beschreiben solltest, was anders läuft als erwartet, also das was den Programmierer interessiert und nicht das Fehlerbild, das der Anwender sieht. Letzteres hast du ja schon beschrieben. Das nützt mir nur nichts, weil ich nicht dein System vor mir habe, um Ursachenuntersuchungen anstellen zu können.

        dedlfix.