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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
|
echo"<h3>Envoi de mail</h3>";
//----------------------------------
// Construction de l'entête
//----------------------------------
// On choisi généralement de construire une frontière générée aleatoirement
// comme suit.
$boundary = "-----=".md5(uniqid(rand()));
// Ici, on construit un entête contenant les informations
// minimales requises.
// Version du format MIME utilisé
$header = "MIME-Version: 1.0\r\n";
// Type de contenu. Ici plusieurs parties de type different "multipart/ mixed"
// Avec un frontière définie par $boundary
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
//---------------------------------
// 1ère partie du message
// Le texte
//---------------------------------
// Chaque partie du message est séparé par une frontière
// $headers .='From: "association A.I.D.E.R"<asso.aider@tele2.fr>'."\n";
//$headers .='Reply-To: asso.aider@tele2.fr'."\n";
$msg = "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding:8bit\r\n";
//C'est pas un spam
$msg .="==================================\r\n
======Ceci n'est pas un SPAM======\r\n
==================================\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// Enfin, on peut écrire le texte de la 1ère partie
//$message=stripslashes($message);
$msg .='<html><head><title>Un titre ici</title></head><body>';
$msg .= $message."\r\n";
$msg .='</body></html>';
echo"$message";
$msg .= "\r\n";
if(strlen($fichier)!=0)
{
//---------------------------------
// 2nde partie du message
// Le fichier
//---------------------------------
// Tout d'abord lire le contenu du fichier
if($fichier[0]=="\\")
{
$fichier=stripslashes($fichier);
}
$fp = fopen($fichier, "rb") or die("probleme à l'ouverture du fichier"); //b pour environnement Windows
$attachment = fread($fp, filesize($fichier));
fclose($fp);
// puis convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tous les 76 caractères
// pour être conforme au format RFC 2045
$attachment = chunk_split(base64_encode($attachment));
//Je veux le nom du fichier
$fichier=basename($fichier);
//je veux l'extension du fichier
$morceaux=explode(".",$fichier);
$extFichier=$morceaux[1];//dans [0] c'est le nom, dans [1] c'est l'extension
//je veux le type MIME associée à cette extension
$typeMIMEFichier=get_type_MIME($extFichier);
// Ne pas oublier que chaque partie du message est séparé par une frontière
$msg .= "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: ".$typeMIMEFichier."; name=\"$fichier\"\r\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: base64\r\n";
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
$msg .= "Content-Disposition: inline; filename=\"$fichier\"\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
// voilà, on indique la fin par une nouvelle frontière
$msg .= "--$boundary--\r\n";
}
//On fait des paquets de 20 destinaires
//Tous sont dans $dest (transmis par le script mailClient.php)
//On enverra autant de mails que de paquets de destinataires
$dest=$expediteur;
$paketKonVeu=20;
$morceauDest=explode(',',$dest);
if(sizeof($morceauDest)<=$paketKonVeu)//ca tient dans un seul paquet
{
$expediteur="";//chaine vide
for($i=0;$i<=$paketKonVeu-1;$i++)
{
if($i==$paketKonVeu-1)//dernier email
{
$expediteur.= $morceauDest[$i];//pas de Virgule à la fin
}
else
{
$expediteur .= $morceauDest[$i].",";
}
}
echo "<BR>Envoi de mail EN COURS";
mail($expediteur,$sujet,$msg,$header);
echo "-----TERMINE";
}
if(sizeof($morceauDest)>$paketKonVeu)//il faut plusieurs paquets
{
$nbPaquets=ceil(sizeof($morceauDest)/$paketKonVeu);
//EXEMPLE PAR PAQUET DE 20 DESTINATAIRES
//INDICES DU TABLEAU :
//0-->19 20-->39 40-->59 60-->79 80-->99 100-->119
for($paquet=0;$paquet<$nbPaquets;$paquet++)
{
$expediteur="";//chaine vide
$seuilBas=$paquet*$paketKonVeu;
$seuilHaut=$seuilBas+($paketKonVeu-1);
for($i=$seuilBas;$i<=$seuilHaut;$i++)
{
if($i==$seuilHaut)//dernier email
{
$expediteur .= $morceauDest[$i];//pas de Virgule à la fin
}
else
{
$expediteur .= $morceauDest[$i].",";
}
}//fin du FOR $seuil
echo "<BR>Envoi de mail pour la serie ".($paquet+1)." de destinataires EN COURS";
set_time_limit(0);
mail($expediteur,$objet,$msg,$header);
echo "-----TERMINE";
}//fin du FOR $paquet
}//fin du IF
echo "<BR><h3>Fin de l'envoi de mail</h3>"; |
Partager