Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-05-2008 10:50:23

MaitreTsiang
Membre
Lieu: Paris
Date d'inscription: 07-08-2007
Messages: 18

[Zend_Mail] Envoi de mail avec pièces jointes de type différents

Bonjour,

je développe un module de newsletter permettant à l'aide d'un formulaire html d'envoyer des mails.

J'ai donc des <input type='file' ...> permettant d'insérer des pièces jointes.
Lorsque j'envoi le formulaire je récupère bien  les fichiers mais je voudrais savoir si on est obligé de renseigner le type de fichier à la méthode createAttachment ou pas.

En effet, je ne sais pas à l'avance le type de fichier qui sera envoyé par les utilisateurs et je veux qu'ils puissent envoyer n'importe quel type.

Auriez vous une solution de script qui permettrait d'avoir un genre de sélection de type automatique ou truc du genre ?

Car tester toutes les extensions possibles c'est moyen :s

Merci !

Hors ligne

 

#2 29-05-2008 11:37:25

MaitreTsiang
Membre
Lieu: Paris
Date d'inscription: 07-08-2007
Messages: 18

Re: [Zend_Mail] Envoi de mail avec pièces jointes de type différents

J'ai trouvé cette solution pour récupérer le type mime du fichier uploadé, ça fonctionnne très bien !

Si ça peut aider quelqu'un smile

function typeMime($nomFichier)
/* retourne le type MIME à partir de l'extension de fichier contenu dans $nomFichier
Exemple : $nomFichier = "fichier.pdf" => type renvoyé : "application/pdf" */
{
   // on détecte d'abord le navigateur, ça nous servira plus tard
   if(preg_match("@Opera(/| )([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
      $navigateur="Opera";
   elseif(preg_match("@MSIE ([0-9].[0-9]{1,2})@", $_SERVER['HTTP_USER_AGENT'], $resultats))
      $navigateur="Internet Explorer";
   else $navigateur="Mozilla";

   // on récupère la liste des extensions de fichiers et leurs types Mime associés
   $mime=parse_ini_file("mime.ini");
   $extension=substr($nomFichier, strrpos($nomFichier, ".")+1);
   
   /* on affecte le type Mime si on a trouvé l'extension sinon le type par défaut (un flux d'octets).
   Attention : Internet Explorer et Opera ne supporte pas le type MIME standard */
   if(array_key_exists($extension, $mime)) $type=$mime[$extension];
   else $type=($navigateur!="Mozilla") ? 'application/octetstream' : 'application/octet-stream';

   return $type;
}

Et maintenant le fichier "mime.ini" :

[textes]
txt = text/plain
htm = text/html
html = text/html
css = text/css

[images]
png = image/png
gif = image/gif
jpg = image/jpeg
jpeg = image/jpeg
bmp = image/bmp
tif = image/tiff

[archives]
bz2 = application/x-bzip
gz = application/x-gzip
tar = application/x-tar
zip = application/zip

[audio]
aif = audio/aiff
aiff = audio/aiff
mid = audio/mid
midi = audio/mid
mp3 = audio/mpeg
ogg = audio/ogg
wav = audio/wav
wma = audio/x-ms-wma

[video]
asf = video/x-ms-asf
asx = video/x-ms-asf
avi = video/avi
mpg = video/mpeg
mpeg = video/mpeg
wmv = video/x-ms-wmv
wmx = video/x-ms-wmx

[xml]
xml = text/xml
xsl = text/xsl

[microsoft]
doc = application/msword
rtf = application/msword
xls = application/excel
pps = application/vnd.ms-powerpoint
ppt = application/vnd.ms-powerpoint

[adobe]
pdf = application/pdf
ai = application/postscript
eps = application/postscript
psd = image/psd

[macromedia]
swf = application/x-shockwave-flash

[real]
ra = audio/vnd.rn-realaudio
ram = audio/x-pn-realaudio
rm = application/vnd.rn-realmedia
rv = video/vnd.rn-realvideo

[autres]
exe = application/x-msdownload
pls = audio/scpls
m3u = audio/x-mpegurl

Dernière modification par MaitreTsiang (29-05-2008 11:38:16)

Hors ligne

 

#3 29-05-2008 12:04:17

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_Mail] Envoi de mail avec pièces jointes de type différents

Bonjour,

L'autre solution, plus fiable mais plus difficile à mettre en place, est d'utiliser la librairie fileInfo.
D'un point de vue purement théorique, quand on change l'extension d'un fichier, ça ne change pas son mime type. Donc on ne peut normalement pas se fier à l'extension pour déterminer le mime.

La libraire fileinfo (regarde dans PECL) permet de détecter le type du fichier en fonction de certains bits caractéristiques...

Dans la pratique ta solution est quasiment tjrs suffisante...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 29-05-2008 14:15:25

MaitreTsiang
Membre
Lieu: Paris
Date d'inscription: 07-08-2007
Messages: 18

Re: [Zend_Mail] Envoi de mail avec pièces jointes de type différents

Oui je connaissais fileinfo mais pour cela il faut avoir le contrôle du serveur (ce qui n'est pas toujours le cas) , comme tu l'a dis ma solution devrait passer un peu partout surtout dans mon cas (service local).

Merci et bonne continuation !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages