Limite de mail depuis un script PHP

Bonjour,

l’usage de la fonction mail() dans un script PHP est limité à 20 messages par heure. Comment cela fonctionne-t-il : par tranche de 60 minutes « glissantes », ou remise à zéro à heures fixes ? Autrement dit, quand on a atteint la limite, à partir de quand est-ce qu’on peut de nouveau envoyer ?

Par ailleurs, quand un appel à mail() échoue dans un script, y a-t-il un moyen de savoir si c’est dû à cette limite ou à une autre raison ? Valeur de retour, affichage d’un message, fichier de log, autre ?

Merci pour votre aide.

Bonjour,

Globalement la fonction mail() est à éviter, il faut lui préférer le passage par le serveur SMTP avec PHPMailer par exemple.

La limite est bien de 20 mails par heure.
Sauf erreur de ma part, si par exemple vous envoyez 75 mails d’un coup à 16h25, 20 vont partir immédiatement, puis 20 autres à 17h, puis 20 autres à 18h, et enfin les 15 derniers à 19h.
Nous pouvons augmenter cette limite dans une marge raisonnable (pas pour des centaines de mails, il faut passer par Sympa dans ce cas) si besoin.

Un mail d’erreur contenant « SMTP ERROR: DATA END command failed: 554 5.7.0 Your message could not be sent. The limit on the number of allowed outgoing messages was exceeded. Try again later. » est expédié si la limite est atteinte.

Il est peut-être possible de récupérer l’erreur dans le retour de PHPMailer, c’est à tester.

Merci pour ces précisions.

J’utilise mail() uniquement pour m’envoyer un bref message à moi-même quand un visiteur utilise certaines pages sur mon site. En production je suis très très loin de 20 messages par heure. Quand je débogue une nouvelle fonctionnalité en faisant une série de tests il m’arrive occasionnellement de m’envoyer plus de 20 messages individuels en peu de temps, et dans ce cas il serait bien de savoir que le message ne part pas pour cette raison et non à cause d’un autre problème que je devrais résoudre. C’est très ponctuel et ne justifie pas d’augmenter la limite.

Je veux bien utiliser PHPMailer au lieu de mail() si c’est recommandé, même si ça me semble bien lourd pour mon usage très limité. Est-ce que PHPMailer est déjà installé chez Ouvaton et il suffit d’inclure quelque chose dans mon script, ou est-ce qu’il faut que je l’installe dans mon espace web ?

Pour utiliser le serveur SMTP authentifié d’Ouvaton, il faudra que mon identifiant et mon mot de passe figurent dans le script. Est-ce vraiment plus sécurisé que d’utiliser mail() ?

Si les mails ne sont pas très importants, alors mail() peut faire l’affaire, mais il risque d’y avoir quelques mails qui passent à la trappe de temps en temps, la fonction mail() n’est pas toujours fiable sur la plateforme.

Pour PHPMailer, l’installation sans composer est expliquée sur https://github.com/PHPMailer/PHPMailer. Et pas de risque particulier à indiquer identifiant et mot de passe dans le script.

J’ai installé PHPMailer et jusqu’ici tout fonctionne bien.

Merci pour votre aide.

1 Like