J'ai réussi a implémenté un petit script php qui se connecte sur une boite mail récupère une pièce jointe d'un mail, l'enregistre dans le dossier d'où est lancé le script et efface le mail.
Jusqu’ici tout va bien, mais j'ai besoin que le script récupère Les 2 pièces jointes quand il y en a 2.
Et là je ne sais pas du tout comment faire et je ne sais même pas si c'est possible.
Merci donc de m'aiguiller.
Mon script actuel est un peu bavard mais pour le moment c'est volontaire. Je précise que je bafouille le php plus que je le parle
Code : Tout sélectionner
$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_headerinfo($imap, $m);
//print_r($header);
$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'];
$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']);
}
}
}
}
foreach ($attachments as $key => $attachment) {
$name = $attachment['name'];
$contents = $attachment['attachment'];
}
echo "Expéditeur : " .$from_email . "<br />\n";
echo "Sujet : " .$subject . "<br />\n";
echo "Pièce jointe : " .$name . "<br />\n";
file_put_contents($name, $contents);
echo "Pièce jointe : " .$name . '</br>';
}
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages avant effacement : " . $check->Nmsgs . "<br />\n";
imap_delete($imap, 1);
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages après effacement : " . $check->Nmsgs . "<br />\n";
imap_expunge($imap,);
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages après imap_expunge : " . $check->Nmsgs . "<br />\n";
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages avant effacement : " . $check->Nmsgs . "<br />\n";
imap_delete($imap, 1);
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages après effacement : " . $check->Nmsgs . "<br />\n";
imap_expunge($imap,);
$check = imap_mailboxmsginfo($imap);
echo "Nombre de messages après imap_expunge : " . $check->Nmsgs . "<br />\n";
imap_close($imap);