Page 1 sur 1

Email + Fichier attaché vide

Posté : 09 nov. 2013, 14:40
par sxmfranck
Bonjour,

J'ai un script PhP qui pose problème lors de l'envoi d'email.
On peut soit attacher des fichiers, et la ca marche bien, soit ne pas attacher de fichier et dans ce cas j'ai un fichier vide qui s'attache au mail qui s'appelle "Part 1.2" 0 kbytes

Le pb c'est que certains parefeux bloquent les messages avec ce fichier attaché vide "suspect".

VOila le code PhP : comment éviter l'envoi de ce fichier vide ???
Merci.

$headers .= "Reply-To: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
$headers .= "This is a multi-part message in MIME format.\n";

$headers .= "--".$strSid."\n";
$headers .= "Content-type: text/html; charset=utf-8\n";
$headers .= "Content-Transfer-Encoding: 7bit\n\n";
$headers .= $message."\n\n";

//*** Attachment ***//
if(count($attachments)>0)
{
for($i=0;$i<count($attachments);$i++){
$strFilesName = $attachments[$i];
$strContent = chunk_split(base64_encode(file_get_contents("up_files/".$strFilesName)));
$headers .= "--".$strSid."\n";
$headers .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";
$headers .= "Content-Transfer-Encoding: base64\n";
$headers .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
$headers .= $strContent."\n\n";
}
}

if(mail($to, $subject,null, $headers)){
echo "[message] Mail has been sent! [/message]";

Re: Email + Fichier attaché vide

Posté : 23 nov. 2013, 14:04
par kodjo
Bonjour,

Je ne sais pas si tu as trouvé une solution mais puisque tes fichiers attachés sont dans un tableau, tu peux simplement supprimer les fichiers indésirables avant de les passer en pièce jointe. Il y a de nombreuses fonctions PHP qui te permettent de rechercher un nom de fichier ou une extension de fichier, ou encore l'absence d'extension de fichier.

Dans l'exemple que tu as donné, tu peux faire

$mesExtensionsOk = array("jpg","png","gif", "txt");

for($i=0;$i<count($attachments);$i++) {

//séparer chaque nom de fichier en 2 parties avec le . de l'extension
$nomFichier = explode(".", $attachments[$i]);
$extension = $nomFichier[1];

//si l'extension n'est pas dans la liste autorisée..
if (!in_array($extension, $mesExtensionsOk)) {
    unset($attachments[$i]);
}
J'ajoute qu'il peut être bon de contrôler dans ton programme la liste des fichiers autorisés pour qu'un utilisateur ne puisse pas envoyer des fichiers indésirables.