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
|
$message_html = nl2br(htmlentities($message_html));
SendEmailwidthJoin($message_txt="",$message_html,$destinataire,$expediteur,$targetFile,$objet,$replyTo="" );
function SendEmailwidthJoin($message_txt,$message_html,$destinataire,$expediteur,$fichiersAJoindre,$objet,$replyTo="" ) {
//=== vérifier et préparer les pieces jointes:
$arrayFiles=array();
//si c'est un fichier seul sur le serveur
if (is_string($fichiersAJoindre)){
$lesFichiers[] = FilePathToArray($fichiersAJoindre);
}
//si c'est un tableau de x fichiers joints sur le serveur
if (is_array($fichiersAJoindre)){
if ((isset($fichiersAJoindre[0])) AND (is_string($fichiersAJoindre[0])) ){
//un array simple avec des strings
foreach($fichiersAJoindre as $stringFile){
$lesFichiers[]= FilePathToArray($stringFile);
}
}
//si x fichiers de type $_FILES (cas le + courrant)
else {
foreach($fichiersAJoindre as $arrayFiles){
// si le champ est vide, on saute le tour
if($arrayFiles['error'] == 4)
continue;
else {
$aboutFile=pathinfo($arrayFiles['name']);
$lesFichiers[]=array(
'chemin' => getenv('TMP')."/".$arrayFiles['tmp_name'],
'nom' => $aboutFile['filename'],
'extension'=>$aboutFile['extension'],
'mimeType'=> mime_content_type(getenv('TMP')."/".$arrayFiles['tmp_name']), // cf. prealable
'contenu' => chunk_split(base64_encode(file_get_contents($arrayFiles['tmp_name'])))
);
}
}
}
}
//===générer les délimiteurs dans l'email ===
do {
$leRand=md5(rand());
$boundary = "-----=".$leRand;
}
while(!strpos($message_txt.$message_html, $leRand) === false);
do {
$leRand=md5(rand());
$boundary_alt = "-----=".md5(rand());
$isOK=true;
foreach($lesFichiers as $fichier){
if(!strpos($fichier['contenu'], $leRand) === false){
$isOK=false;
}
}
}
while($isOK==false);
//=== le type de retour à la ligne ===
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $destinataire)) {
$passage_ligne = "\r\n";
}
else{
$passage_ligne = "\n";
}
//=== header ===
$headers ="From: ".$expediteur.$passage_ligne;
if ($replyTo=="") {
$headers.= "Reply-to: \"".$expediteur."\"".$passage_ligne;
}
else {
$headers.= "Reply-to: \"".$replyTo."\"".$passage_ligne;
}
$headers.= "MIME-Version: 1.0".$passage_ligne;
$headers.= "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;
//=====Ajout du message au format HTML.
if ($message_html!=""){
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
$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;
$message_default = "</br></br>Si accès à l'intranet, répondre directement dans le dossier</a>";
$message_default .= "</br></br>Si pas d'accès à l'intranet, répondre par email en conservant le numéro de dossier en objet";
$message.= $passage_ligne.$message_default.$passage_ligne;
//On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
}
//==========
//pièces jointes
foreach($lesFichiers as $fileArray)
{
$message.= $passage_ligne."--".$boundary.$passage_ligne;
$message.="Content-Type: ".$fileArray['mimeType']."; name=\"".$fileArray['nom'].".".$fileArray['extension']."\"".$passage_ligne;
$message.="Content-Transfer-Encoding: base64".$passage_ligne;
$message.="Content-Disposition: attachment; filename=\"".$fileArray['nom'].".".$fileArray['extension']."\"".$passage_ligne;
$message.= $passage_ligne.$fileArray['contenu'].$passage_ligne.$passage_ligne;
}
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//Et envoi du mail...
mail($destinataire, "$objet", $message, $headers);
} |
Partager