| |
| Voir le sujet précédent :: Voir le sujet suivant |
| Auteur |
Message |
tsiry

Inscrit le: 12 Déc 2006 Messages: 5
|
Posté le: Ven Mar 02, 2007 4:26 pm Sujet du message: Messagerie en PHP |
|
|
La fonction mail() en PHP :
En PHP, il y a une fonction très simple pour envoyer un e-mail. Sa syntaxe est :
<?php
mail("adresse email destinataire","sujet","corps du message","options");
?>
Le dernier champ est facultatif, il contient les en-têtes.
Mais ce que nous allons voir c'est l'envoi d'un e-mail avec une pièce jointe.
Il est possible d'envoyer un e-mail avec une pièce jointe en PHP. Nous allons donc utiliser une classe d'objet pour envoyer nos e-mails. Cette classe va se charger de formater notre message au format MIME, en attachant optionnellement un ou plusieurs fichiers. Une fois le message formaté, elle se chargera de l'envoyer, en utilisant la fonction mail(). Voici un exemple très simple pour montrer la syntaxe à mettre en oeuvre pour utiliser cette classe.
Structure de la fonction mail() :
Ici, le fichier joint est supposé placé dans le même répertoire que le script.
<?php
// On fait appel à la classe
include("mime_mail.class.php");
// On commence par mettre dans une variable le fichier à attacher.
$fichier = @fread(fopen("logo.jpg", "r"), filesize("logo.jpg"));
// On créé une instance de cette classe
$mail = new mime_mail();
// Définition des destinataires.
$email = "toto@toto.fr";
$mail->to = $email;
// Titre du message
$mail->subject = "E-mail avec un fichier attaché";
// Définition du corps du message
$corps = "Bonjour monsieur,\n Ci-joint le logo de phpteam.net";
$mail->body = $corps;
// Définition de l'e-mail de l'expediteur ( paramètre optionnel )
$mail->from = "tata@tata.fr";
// Défintion des entêtes supplementaires ( paramètres optionnels )
$entetedate = date("D, j M Y H:i:s -0700");
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n";
$entetemail .= "Date: ";
$mail->headers = "$entetemail";
// Définition du fichier attache ( paramètre optionnel )
$mail->attach("$fichier", "logo.jpg");
// On envoi le message
$mail->send();
?>
Mais dans le cas où le fichier joint sera uploadé via le formulaire d'envoi d'email, la structure de notre fonction mail sera comme suit :
<?php
// On fait appel à la classe
include("mime_mail.class.php");
// Upload du fichier a envoyer sur le serveur *
$tmp_file = $_FILES['files']['tmp_name'];
$file_name = $_FILES['files']['name'];
$file_type = $_FILES['files']['type'];
$file_size = $_FILES['files']['size'];
$length = strlen($file_name);
$chemin = "upload_file/";
move_uploaded_file($tmp_file, $chemin.$file_name);
$filename = $chemin.$file_name;
// On créé une instance de cette classe
$mail = new mime_mail();
// Définition des destinataires.
$email = "toto@toto.fr";
$mail->to = $email;
// Titre du message
$mail->subject = "E-mail avec un fichier attaché";
// Définition du corps du message
$corps = "Bonjour monsieur,\n Ci-joint le logo de phpteam.net";
$mail->body = $corps;
// Définition de l'e-mail de l'expediteur ( paramètre optionnel )
$mail->from = "tata@tata.fr";
// Défintion des entêtes supplementaires ( paramètres optionnels )
$entetedate = date("D, j M Y H:i:s -0700");
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n";
$entetemail .= "Date: ";
$mail->headers = "$entetemail";
// Définition du fichier attache ( paramètre optionnel )
$tmp = fread(fopen($filename, "rb"), $file_size);
$tmp2 = explode("/",$file_name);
$tmp2 = $tmp2[sizeof($file_name)-1];
$mail->attach($tmp, $tmp2); // fichier attache (optionnel)
// On envoi le message
$mail->send();
?>
Et voici ce que contienne le ficiher mime_mail.class.php
<?php
class mime_mail
{
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;
// constructeur
function mime_mail()
{
$this->parts = array();
$this->to = "";
$this->from = "";
$this->subject = "";
$this->body = "";
$this->headers = "";
}
// attache un fichier au message
function attach($message,$name,$ctype = '')
{
// type de contenu non defini
if(empty($ctype))
{
// on essaie de reconnaitre l'extension
switch(strrchr(basename($name), "."))
{
case ".gz": $ctype = "application/x-gzip"; break;
case ".tgz": $ctype = "application/x-gzip"; break;
case ".zip": $ctype = "application/zip"; break;
case ".pdf": $ctype = "application/pdf"; break;
case ".png": $ctype = "image/png"; break;
case ".gif": $ctype = "image/gif"; break;
case ".jpg": $ctype = "image/jpeg"; break;
case ".txt": $ctype = "text/plain"; break;
case ".htm": $ctype = "text/html"; break;
case ".html": $ctype = "text/html"; break;
default: $ctype = "application/octet-stream"; break;
}
}
$this->parts[] =
array (
"ctype" => $ctype,
"message" => $message,
"encode" => $encode,
"name" => $name
);
// fin de fonction
}
// fonction utilisee pour contruire le message MIME
// utilisee depuis build_multipart()
function build_message($part)
{
$message = $part[ "message"];
$message = chunk_split(base64_encode($message));
$encoding = "base64";
return "Content-Type: ".$part[ "ctype"].
($part[ "name"]? "; name = \"".$part[ "name"]. "\"" : "").
"\nContent-Transfer-Encoding: $encoding\n\n$message\n";
}
// compose le message MIME
// utilisee depuis send()
function build_multipart()
{
$boundary = "b".md5(uniqid(time()));
$multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
for($i = sizeof($this->parts) - 1; $i >= 0; $i--){
$multipart .= "\n".$this->build_message($this->parts[$i]). "--$boundary";
}
return $multipart.= "--\n";
}
// envoie le message
// derniere fonction a appeler
function send()
{
$mime = "";
// parametres optionnels
if (!empty($this->from)) $mime .= "From: ".$this->from. "\n";
if (!empty($this->headers)) $mime .= $this->headers. "\n";
if (!empty($this->body)) $this->attach($this->body, "", "text/html; charset=\"iso-8859-1\"");
// entete MIME
$mime .= "MIME-Version: 1.0\n".$this->build_multipart();
// envoi du message
mail($this->to, $this->subject, "", $mime);
}
}; // fin de la classe
?>
Vous pouvez maintenant créer votre propre formulaire d'envoi d'e-mail .
Je vous rappelle que dans le script, tous les fichiers doivent être dans le même répertoire. Vous pourrez modifier ça en les mettant dans les includes.  |
|
| Revenir en haut de page |
|
 |
dd-bug Medaille 1


Inscrit le: 09 Juin 2006 Messages: 15 Localisation: a gauche en entrant
|
Posté le: Sam Juin 09, 2007 6:24 am Sujet du message: |
|
|
merci pour cette sympathique class .. juste une question peux ton definir le champ encoding en tant qu'encrypted ??
dd-mesages _________________ Vous avez le cerf-volant ... prenez de l'air !! |
|
| Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
| |
|