PHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer
avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant
la messagerie électronique, il est naturel que PHP permette d'envoyer des mails.
En PHP3 il existe une fonction très simple qui permet d'envoyer un email. Voilà sa syntaxe
Entier mail(chaîne email_destinataire,
chaîne Sujet,
chaîne corps_du_message,
chaîne options);
Le dernier champ est facultatif, on en parlera juste après. Dans un premier temps nous allons envoyer un email de base. Voilà le nouveau code du fichier traitant les données envoyées par le formulaire précédant :
<html?>
<body?>
<h4>Merci <?echo $nom;??></h4?>
<?
echo "<p>Votre commentaire : $texte</p?>";
mail(
"webmaster@commentcamarche.net",
"Commentaire sur CCM",
"$nom a laissé un commentaire à propos de commentcamarche.net: \n\n$texte"
);
?>
</body?>
</html?>
Les \n à l'intérieur du corps de m'email permettent d'aller à la ligne
|
Chez certains hébergeurs (dont Free) la fonction mail est désactivée
car elle permet de simuler un envoi de mail à partir de n'importe quelle adresse. Ainsi elle est parfois remplacée
par la fonction email()
|
Le champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de retour...
Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail :
$from_email = "contact@phpfrance.com";
$entetedate = date("D, j M Y H:i:s -0600"); // Offset horaire
$entetemail = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "Cc: \n";
$entetemail .= "Bcc: \n"; // Copies cachées
$entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
$entetemail .= "X-Mailer: PHP/index.php3" . phpversion() . "\n" ;
$entetemail .= "Date: $entetedate";
La commande précédente équivaut donc à :
mail(
"webmaster@commentcamarche.net",
"Commentaire sur commentcamarche.net",
"$nom a laissé un commentaire à propos de commentcamarche.net: \n\n$texte",
$entetemail
);
La fonction email() remplace parfois la fonction mail() chez certains
hébergeurs (dont Free) car elle permet uniquement d'envoyer des mails à
partir de votre adresse email.
Elle s'utilise à peu près de façon similaire à la fonction
mail() mais sa syntaxe est quelque peu différente:
email(chaîne compte,chaîne destinataire,chaîne titre,chaîne message[,options]);
Voici un exemple d'utilisation du site à partir du compte webmaster pour le domaine
commentcamarche.net:
email("webmaster",
"toto@wanadoux.fr",
"Bonjour Toto",
"Salut Toto\nvoici ton message");
Le protocole IMAP (Internet Message Access Protocol) est un protocole
(datant de 1986) permettant d'accèder à une messagerie électronique. Beaucoup plus
évolué que le protocole POP (Post Office Protocol), il a toutefois été supplanté
par ce dernier qui est plus simple.
Ainsi PHP implémente la version 4 de ce protocole et fourni des fonctions permettant de manipuler des boîtes
aux lettres directement sur le serveur IMAP, ainsi que sur des serveurs POP ou NNTP (serveurs de news).
La première fonction à utiliser est la fonction imap_open(), elle permet de se connecter à la boîte
au lettre et retourne un identifiant d'accès pour la boîte aux lettres, utilisable avec les autres fonctions IMAP.
Sa syntaxe est la suivante:
Entier imap_open(chaîne boîte,
chaîne utilisateur,
chaîne mot_de_passe);
La boîte doit être spécifiée de la manière suivante (il s'agit
ici de la boîte INBOX, celle dans laquelle les nouveaux messages arrivent):
"{serveur:port}INBOX"
Le port utilisé par les serveurs IMAP est 143 par défaut.
Voici dans le cas de la newsletter de Comment ça Marche le script
permettant d'ouvrir la boîte:
$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"newsletter@commentcamarche.net",
"password");
Une fois la boîte au lettre ouverte, il est possible (et généralement utile)
de consulter les informations sur l'état de la boîte aux lettres grâce à la fonction imap_check() dont la syntaxe est comme suit:
Entier imap_check(chaîne Boîte);
Celle-ci retourne un objet dont il est possible de connaître les propriétés, c'est-à-dire
toutes les informations sur la boîte au lettre passée en paramètre. Voici les propriétés de l'objet retourné par la fonction
imap_check():
Propriété |
Description |
Date |
Date du dernier message |
Driver |
Version du pilote utilisé |
Mailbox |
Nom associé à la boîte aux lettres |
Nmsgs |
Nombre de messages dans la boîte |
Recent |
Nombre de messages non lus |
La fonction certainement la plus utile est la fonction imap_header() car c'est elle
qui permet de lire les messages contenus à l'aide de l'identifiant de la boîte et du numéro
du message:
Objet imap_header(entier Boîte,
entier Message[,
entier Longueur_champ_from[,
entier Longueur_sujet]]);
Ainsi les propriétés de l'objet renvoyé par imap_header() sont les suivantes:
Propriété |
Description |
Answered |
|
bcc |
|
bccadress |
|
cc |
|
ccaddress/td>
| |
Date |
|
date |
|
Deleted |
|
fetchfrom |
|
from |
|
in_reply_to |
|
MailDate |
|
message_id |
|
Msgno |
|
newsgroups |
|
Recent |
|
references |
|
remail |
|
return_pathaddress |
|
sender |
|
senderaddress |
|
Size |
|
subject |
|
Subject |
|
to |
|
toaddress |
|
update |
|
Unseen |
|
Les propriétés de l'objet retourné par la fonction imap_header()
sont accessible par la notation suivante:
$Nom_de_l_objet->Propriétés;
La fonction imap_num_msg() permet de savoir très facilement le nombre de messages sur le serveur.
Entier imap_num_msg(entier boîte);
Ainsi le script suivant permet d'afficher les mails contenus dans la boîte INBOX du compte newsletter@commentcamarche.net
et supprime les mails dont le sujet contient "a détruire" ou les mails dont le corps contient "destruction":
<?
$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"newsletter@commentcamarche.net",
"password");
$check = imap_check($mailbox);
$nMessages = imap_num_msg($mailbox);
echo "<table border=\"1\">";
for($index=1; $index <= $nMessages; $index++){
$header = imap_header($mailbox, $index);
echo "<tr><td>$header->Subject</td></tr>\n";
$from = $header->from[0];
echo "<tr><td>$from</td></tr>\n";
$corps = imap_body($mailbox,$index);
echo "<tr><td>$corps</td></tr>\n";
if (eregi(".*a detruire.*",$header->Subject)||
eregi("destruction",$corps)) {
imap_delete($mailbox,$index,0);
}
echo "</table>\n";
}
imap_expunge($mailbox);
imap_close($mailbox);
?>
|