Php - Utiliser php_imap au lieu de mail()

En php, la manière la plus simple d'envoyer un mail est d'utiliser la fonction mail(). Celle-ci permet d'envoyer un mail en une ligne de code. Néanmoins, elle présente quelques limites :

- Ovh, par exemple, vous limite dans votre usage de cette fonction. Il m'arrive régulièrement que des clients me contactent pour me demander comment faire pour que ovh "débloque" leur envoi de mail. En effet, une faille dans votre site peut être un moyen pour des bots ou des hackers mal intentionnés de spammer vos mailing listes. 


- Les mails envoyés via cette fonction arrivent souvent dans le dossier "spam" du destinataire, à moins de ne définir précisemment les bons header. Citons par exemple hotmail, dont l'anti-spam est un véritable anti-mail() ^


 


Il existe, donc, une alternative à cette fonction, à savoir l'utilisation des librairies php_imap de php, sous réserve, bien entendu, que cette extension soit installée dans votre config php.


 


Avantages de php_imap ?


- Votre hébergeur ne vous bloquera pas (il n'a pas grand intérêt à le faire, puisqu'en cas de spam, l'anti spam de la boîte mail de destination blacklistera l'adresse mail et non l'ip du serveur)


- Les boites mail aiment bien les messages envoyés via un compte imap identifié. 


 


Voyons comment utiliser php_imap pour envoyer des mails via php.











Tout d'abord, définissons les variables de connexion à votre serveur imap (ai-je oublié de préciser qu'avec php_imap il vous faut un compte imap, quelque part ? )



Par exemple :




$boite = "INBOX";

$serveur_entrant = "mail.serveur.com";

$port = ":110"; // A configurer selon votre hébergeur mail

$protocole = "/pop3/notls"; // A configurer selon votre hébergeur mail

$identifiant = "votre_mail@domaine.com";

$mot_de_passe = "mot_de_passe";






Quelques remarques: 

L'inconvénient d'imap, qui est aussi son avantage, est la nécessité de devoir se connecter avec un login/mot de passe. Aussi, vous devrez insérer dans votre code votre mot de passe en clair. Si votre site n'est pas bien conçu, et que quelqu'un a accès à votre code, il aura vos identifiants mail. Veillez donc, d'une part (mais c'est un peu évident) à sécuriser votre code, mais également à utiliser une boîte imap dédiée à vos envois via php. 



Un autre inconvénient de php_imap est que vous devez spécifier un port, et un protocole. (à savoir 110 et pop3/notls). Chez certains hébergeurs, cette configuration nécessite d'être modifiée, et donc, vous devrez chercher (google est votre ami :) ) les bons ports et protocoles correspondant.







Une fois ces variables définies, on se connecte via php_imap à votre boîte mail






if ($mail_cnx = imap_open ("{".$serveur_entrant.$port.$protocole."}".$boite, $identifiant, $mot_de_passe) ) {






La fonction imap_open vous renverra false en cas d'échec (d'où l'utilisation du if). Vous pourrez ainsi avoir une confirmation du succès de votre connexion.







On définit quelques entêtes :




 $t_header  = 'MIME-Version: 1.0' . "
";

          $t_header .= 'Content-type: text/html; charset=iso-8859-1' . "
";

 $t_header.='From: VotreNom <adresse@expediteur.com>
";






Ici, on spécifie que le mail sera en html, et on insère l'adresse mail de l'expéditeur (la votre.). Vous pouvez y insérer n'importe quoi, mais si votre domaine mail ne correspond pas à votre serveur, il est probable qu'il atterrisse dans les spam. Donc, pour un serveur imap domaine.com, il est souhaitable de mettre une adresse d'origine en @domaine.com ..






Envoyons le mail, via imap_mail()



   if(imap_mail($destinataire,$sujet, $message_html, $t_header))



Cette fonction renvoi true en cas de succès, false en cas d'échec. ICi aussi, on insère un "if" pour avoir un message d'erreur/confirmation.







Phase finale, on ferme la connexion imap :



imap_close($mail_cnx);

 










Pour simplifier le processus, il est tout à fait imaginable de créer une fonction send_mail(), qui enverra le mail via imap, et vous simplifiera votre code :









function send_mail($destinataire,$sujet, $message_html){






$boite = "INBOX";

$serveur_entrant = "mail.serveur.com";

$port = ":110"; // A configurer selon votre hébergeur mail

$protocole = "/pop3/notls"; // A configurer selon votre hébergeur mail

$identifiant = "votre_mail@domaine.com";

$mot_de_passe = "mot_de_passe";




if ($mail_cnx = imap_open ("{".$serveur_entrant.$port.$protocole."}".$boite, $identifiant, $mot_de_passe) ) {

   if(imap_mail($destinataire,$sujet, $message_html, $t_header)){

imap_close($mail_cnx);

return true;

   }

   imap_close($mail_cnx);

}



  return false;

}









Cette fonction vous renverra true en cas de succès, ou false en cas d'échec.
Gpenverne

Gpenverne

Développeur backend symfonien, qui trouve toujours moyen de faire des machins avec des bidules même si ce n'est pas utile.

Read More