PHP INITIÉ - Envoyer vos emails avec php

PHP INITIÉ - Envoyer vos emails avec php

L'Email est le service internet le plus populaire aujourd'hui. Une abondance d'emails sont envoyés et reçus chaque jour. Le but de cet article est de montrer comment fabriquer et envoyer des emails avec PHP.
Ainsi, vous voulez envoyer des messages emails automatisés depuis votre application PHP. Ceci peut être en réponse directe à une action d'un utilisateur, comme de s'inscrire sur votre site, ou un événement récurrent à un moment donné, tel qu'une lettre d'information mensuelle. Quelquefois les emails contiennent des fichiers attachés, avec à la fois des portions de simple texte et de HTML, et ainsi de suite. Pour comprendre comment envoyer chaque variation qui peut exister dans un email, nous allons commencer avec un exemple simple et avancer jusqu'au plus compliqué.
1° Envoyer un Email de Texte Simple
2° Envoyer un Email HTML
3° Envoyer un Email avec des Attachements
Remarquez que pour envoyer de l'email avec PHP vous avez besoin d'un serveur d'email fonctionnel que vous avez l'autorisation d'utiliser: pour les machines Unix, c'est souvent Sendmail; pour les machines Windows, vous devez régler la directive SMTP dans votre fichier php.ini pour indiquer votre serveur email.

Envoyer un Email de Texte Simple:
Regardons d'abord comment envoyer des messages de texte simple. PHP possède la fonction mail() pour envoyer de l'email, qui prend trois paramètres de base et deux optionnels. Ces paramètres sont, dans l'ordre, l'adresse email où le message doit être envoyé, le sujet de l'email, le message à envoyer, des en-têtes additionnels que vous désirez inclure et finalement un paramètre additionnel pour le programme Sendmail. La fonction mail() renvoie True si le message a été envoyé avec succès et False autrement.

PHP INITIÉ - Envoyer vos emails avec php

Regardez l'exemple:

.01
.02
.03
.04
.05
.06
.07
.08
.09
.10
.11
.12
.13
.14
.15
.16
.17
  <?php

//définit le destinataire de l'email
$to = 'youraddress@example.com';
//définit le sujet de l'email
$subject = 'Test email';
//définit le message à envoyer.
$message = "Hello World! This is my first mail.";
//définit les en-têtes que nous voulons faire passer.
$headers = "From: webmaster@example.comrnReply-To: webmaster@example.com";
//envoie l'email
$mail_sent = @mail( $to, $subject, $message, $headers );
//si le message a été envoyé avec succès imprimer "Mail sent". Autrement imprimer "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";

?>
Comme vous pouvez le voir, c'est très facile d'envoyer un email. Vous pouvez ajouter plus de destinataires en ajoutant leurs adresses, séparées par une virgule, à la variable $to, ou en ajoutant des en-têtes cc: ou bcc: . Si vous ne recevez pas l'email test, vous avez probablement mal installé PHP, ou vous n'avez pas l'autorisation d'envoyer des emails.


Envoyer un Email HTML:
La prochaine étape est d'examiner comment envoyer un email HTML. Néanmoins, quelques clients email ne peuvent pas comprendre les emails HTML. Il est donc mieux d'envoyer tout email HTML en utilisant une construction en plusieurs parties, où une partie contient une version de l'email avec le texte en clair et l'autre partie est en HTML. Si vos clients ont l'email HTML désactivé, ils recevront quand même un sympathique email, même s'ils ne reçoivent pas tout le balisage HTML. Regardez l'exemple:

.01
.02
.03
.04
.05
.06
.07
.08
.09
.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
  <?php

//définit le destinataire de l'email
$to = 'youraddress@example.com';
//définit le sujet de l'email
$subject = 'Test HTML email';
//crée une chaîne de balisage. Elle doit être unique
//Ainsi nous utilisons l'algorithme MD5 pour générer un hachage aléatoire
$random_hash = md5(date('r', time()));
//définit les en-têtes que nous voulons faire passer.
$headers = "From: webmaster@example.comrnReply-To: webmaster@example.com";
//ajoute la chaîne de balisage et mime la spécification de type
$headers .= "rnContent-Type: multipart/alternative; boundary="PHP-alt-".$random_hash.""";
//définit le corps du message.
ob_start(); //Active la registration de sortie
?>
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!!
This is simple text email message.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--
<?
//copie le contenu actuel du tampon dans la variable $message et efface la registration de sortie actuelle
$message = ob_get_clean();
//envoie l'email
$mail_sent = @mail( $to, $subject, $message, $headers );
// si le message a été envoyé avec succès imprimer "Mail sent". Autrement imprimer "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";

?>
Dans l'exemple précédent nous ajoutons un en-tête additionnel de Contenu-Type:multiparties/alternative et chaîne de balisage qui délimite les différentes zones de l'email. Remarquez que le type de contenu du message lui-même est envoyé en tant qu'en-tête de courrier, alors que les types des contenus des parties individuelles du message sont inclus dans le message lui-même. De cette manière, les clients du email peuvent décider quelle partie du message ils veulent afficher.

Envoyer un Email avec Attachement:
La dernière variation que nous allons étudier est l'email avec attachements. Pour envoyer un email avec attachement nous avons besoin d'utiliser le type multipart/mixed MIME qui spécifie que des types mélangés seront inclus dans l'email. De plus, nous voulons utiliser le type multipart/alternative MIME pour envoyer à la fois une version en texte clair et une version HTML de l'email. Regardez l'exemple:
.01
.02
.03
.04
.05
.06
.07
.08
.09
.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
  <?php
//définit le destinataire de l'email
$to = 'youraddress@example.com';
//définit le sujet de l'email
$subject = 'Test email with attachment';
//crée une chaîne de balisage. Elle doit être unique
//Ainsi nous utilisons l'algorithme MD5 pour générer un hachage aléatoire
$random_hash = md5(date('r', time()));
//définit les en-têtes que nous voulons faire passer. Remarquez qu'ils sont séparés avec rn
$headers = "From: webmaster@example.comrnReply-To: webmaster@example.com";
//ajoute une chaîne de balisage et mime la spécification de type
$headers .= "rnContent-Type: multipart/mixed; boundary="PHP-mixed-".$random_hash.""";
//lit le contenu du fichier attaché comme une chaîne de caractères,
//l'encode avec MIME base64,
//et le sépare en plus petits morceaux
$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip')));
//définit le corps du message.
ob_start(); //Active la mémoire tampon en sortie
?>
--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!!
This is simple text email message.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--

--PHP-mixed-<?php echo $random_hash; ?> 
Content-Type: application/zip; name="attachment.zip" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment 

<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--

<?php
//copie le contenu actuel du tampon dans la variable $message et efface le tampon de sortie actuel
$message = ob_get_clean();
//envoie l'email
$mail_sent = @mail( $to, $subject, $message, $headers );
// si le message a été envoyé avec succès imprimer "Mail sent". Autrement imprimer "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
?>
Comme vous le voyez, envoyer un email avec attachement est facile à faire. Dans l'exemple précédent nous avons un type multipart/alternative MIME qui spécifie deux versions de l'email. Pour inclure un attachement à notre message, nous avons lu les données dans le fichier spécifié comme une chaîne de caractères, l'avons encodé avec base64, séparé en plus petits morceaux pour être sûr qu'il satisfasse les spécifications MIME puis nous l'avons inclus en tant qu'attachement.