php et réception mails

Invité
Invité n'ayant pas de compte PHPfrance

11 nov. 2006, 13:00

Bonjour,
est-il possible de traiter le contenu d'un email à la réception avec un script php?

Par exemple: un ami m'envoie une image jpg en pièce jointe à mon adresse email.

Est-il possible en php de récupérer automatiquement l'image, d'enregistrer sont nom (monimage.jpg) et de la placer dans un répertoire sur le serveur?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

11 nov. 2006, 15:34

C'est possible.

Mais...
  • Ce n'est pas simple.
  • Ce n'est pas forcément une bonne idée.
    En enregistrant aveuglément sur ton serveur une pièce jointe transmise par mail,
    comment vérifies-tu celle-ci ?

    Que se passera-t-il si la pièce jointe contient un virus ?...

Invité
Invité n'ayant pas de compte PHPfrance

11 nov. 2006, 16:57

c'est à réfléchir au niveau de la sécurité.
comment faire en php pour réceptionner cette image et la traiter?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

11 nov. 2006, 17:03

une image transmise par mail en pièce jointe est encodée (cf. base64_encode()).
Il te faudra donc la décoder et la sauvegarder.

:!: Tu ne vas pas manquer de boulot... :ordi:

Invité
Invité n'ayant pas de compte PHPfrance

11 nov. 2006, 17:33

j'ai du mal à voir pourquoi c'est beucoup de boulot? peux tu m'en dire plus? quelles sont les principales difficultés?

Invité
Invité n'ayant pas de compte PHPfrance

13 nov. 2006, 00:12

j'ai trouvé ce script pour réaliser l'opération. Les fonctions utilisées permettent-elles de résoudre les pb de sécurité?
<?php 
  
//Tout d'abord, on ouvre une boite mail 
$mail = imap_open("{nom serveur ou localhost ou autres/pop3}INBOX",'utilisateur','motdepasse'); 
  
//Quitte à la faire, autant le faire pour chaque message ! 
$nbmess = imap_num_msg($mail); 
if ($nbmess == 0) 
{ 
print " 
    <div align='center'> 
     <b>Aucun message présent sur le serveur</b> 
<br /><br /> 
    </div> 
"; 
} 
else 
{ 
for($j=1;$j<=$nbmess;$j++) 
{ 
//Extraction du sujet du message, pour ceux qui voudrait faire un test sur un titre au préalable 
$header = imap_headerinfo($mail,$j); 
$sujet = $header->subject; 
  
//Extraction de la structure du message     
$struct = imap_fetchstructure($mail,$j); 
  
// On compte le nombre de partie dans la structure du message 
if ($struct->type == 1) 
{ 
$nbrparts = !$struct->parts ? "1" : count($struct->parts); 
} 
  
//On place le code binaire de la pièce dans un tableau 
$piece = array(); 
for($h=2;$h<=$nbrparts;$h++) 
{ 
$part = $struct->parts[1] ; 
  
//Extraction du code binaire de la pièce jointe 
$piece = imap_fetchbody($mail,$j,$h); 
  
//Le 3 est spécifique à l'encodage en base64 (le plus répandu) pour les pièces jointes. 
if ($part->encoding == "3") 
{ 
//Comptage du nombre de parametres 
$nbparam = count($part->parameters) 
         
for ($i = 0; $i < $nbparam ; $i++) 
{ 
//Récupération du nom de la pièce jointe 
$param = $part->parameters[$i]; 
if ($param->attribute == "NAME") 
{ 
$nom_fichier = $param->value; 
} 
else 
{ 
$nom_fichier = "Nom de fichier introuvable"; 
} 
} 
//Décodage du code binaire de la pièce jointe 
$piece[$h] = imap_base64($piece[$h]); 
} 
  
$nom_fichier = str_replace(".doc","",$nom_fichier) ; 
  
//Ouverture du fichier et création s'il n'existe pas 
$newfichier = fopen("C:/".$nom_fichier.$h.".doc","w+"); 
//Ecriture dans le fichier 
fwrite($newfichier,$piece[$h]); 
//Fermeture du fichier 
fclose($newfichier); 
} 
} 
} 
  
?>         

Invité
Invité n'ayant pas de compte PHPfrance

14 nov. 2006, 02:36

pas de réponse?