Bonjour à tous,

Je souhaite construire un script php qui me permettra d'envoyer de manière automatique un fichier de noms issu d'une bdd par email, le tout par cron dans un deuxième temps. J'ai construit mon script pour que le fichier csv se génère mais ça coince au niveau de l'envoi du fichier, j'ai un fichier vide en pièce jointe, cela ne vient pas de l'antivirus. J'ai un problème dans mon code mais je ne trouve pas lequel.
Si vous vous pouvez m'aider
Merci beaucoup

Voici mon code :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 
// Connexion à la base de données
mysql_connect("localhost", "root", "");
mysql_select_db("base");
 
 
 
// la variable qui va contenir les données CSV
$outputCsv = '';
 
// Nom du fichier final
$fileName = 'etrangers.csv';
 
$requete = "SELECT * FROM etrangers WHERE pays != 'france' ORDER BY id_etran";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
    $i = 0;
 
    while($Row = mysql_fetch_assoc($sql))
    {
        $i++;
 
     // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
        if($i == 1)
        {
            foreach($Row as $clef => $valeur)
                $outputCsv .= trim($clef).';';
 
            $outputCsv = rtrim($outputCsv, ';');
            $outputCsv .= "\n";
        }
 
        // On parcours $Row et on ajout chaque valeur à cette ligne
        foreach($Row as $clef => $valeur)
            $outputCsv .= trim($valeur).';';
 
        // Suppression du ; qui traine à la fin
        $outputCsv = rtrim($outputCsv, ';');
 
        // Saut de ligne
        $outputCsv .= "\n";
 
    }
 
}
else
    exit('Aucune donnée à enregistrer.');
 
// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
 
//echo $outputCsv;
//exit();
 
 
 
 
$mail = 'webmaster@free.fr'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
    $passage_ligne = "\r\n";
}
else
{
    $passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Reporting";
$message_html = "<html><head></head><body><b>Bonjour</b>, fichier</body></html>";
//==========
 
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("http://localhost/upload/etrangers.csv", "r");
$attachement = fread($fichier, filesize("http://localhost/upload/etrangers.csv"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
 
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Report";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"test\"<xxx>".$passage_ligne;
$header.= "Reply-to: \"test\" <xxx>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
 
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
 
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
 
 
$message.= $passage_ligne."--".$boundary.$passage_ligne;
 
//=====Ajout de la pièce jointe.
 
$message.= "Content-Type: fichier/csv; name=\"etrangers.csv\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"etrangers.csv\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========
//=====Envoi de l'e-mail.
mail($mail,$sujet,$message,$header);