La fonction mail() dans une boucle

Publié le 03 juillet 2009 par Methylbro

Comme le montre la figure suivante ; la fonction mail propose une interface entre le développeur et le serveur d'envoi de messagerie. Ainsi donc le développeur peut s'affranchir du dialogue avec le serveur SMTP.

Cependant ; comme vous pouvez le voir sur le diagramme à chaque appel de la fonction mail() cette dernière var ouvrir un nouveau socket vers le serveur SMTP, envoyer son mail avant de refermer ce même socket.

Imaginez alors ce qu'il se passe lorsque vous envoyer comme beaucoup de monde votre newsletter de la façon suivante :

$sql = "SELECT email FROM abonnes;";
$res = mysql_query($sql);
while($row=mysql_fetch_assoc($res)){
mail($row['email'], $subject, $message);
}

Lors de chaque itération de votre boucle while, la fonction mail() va ouvrir un socket, envoyer son message, refermer le socket . Si vous avez 10 000 abonnés ; le script va renégocier 10 000 fois une nouvelle connexion. Alors que celle-ci pourrait très bien rester ouverte !

Lorsque vous souhaitez donc envoyer de gros volumes de courrier électronique, la fonction mail() est un très mauvais choix. Pour pallier ce problème il existe d'excellents paquets PEAR :