2011-02-28 2 views
0

J'ai un système qui envoie beaucoup de rapports de courriels (environ 500+ emails par jour). Je ne suis pas un spammeur :) Ce n'est pas vraiment une grande quantité d'e-mails, mais ils sont envoyés en boucle et j'ai souvent cette erreur "PHP Attention: mail(): Impossible d'exécuter le programme de distribution de courrier". Je sais qu'il existe un paquet PEAR :: Mail_Queue pour ce problème. Mais pouvez-vous s'il vous plaît laissez-moi savoir si ce paquet est vraiment utile, ou dois-je chercher quelque chose d'autre. Merci beaucoupenvoyer de grandes quantités de courrier électronique en boucle

Répondre

0

Vous devez utiliser sleep() entre les mails, cela résout cela.

+0

Merci pour votre réponse. Mais j'ai peur, ça va augmenter le temps d'exécution du script, n'est-ce pas? – alagar

+1

Heya mate, il va ajouter un peu de temps à votre exécution MAIS il ne comptera pas vers le temps d'exécution maximale. Donc, pour 500 mails une fois par jour, ou même 5000, cela n'aurait pas d'importance. –

0

Une alternative pourrait également être d'envoyer des mails directement via un serveur SMTP. Cela vous évite l'aller-retour de PHP appelant sendmail (ou quel que soit le MTA utilisé) "à travers le shell" afin de livrer le courrier. Par exemple, le Zeta Mail component vous permet d'envoyer des mails directement via un serveur SMTP sans avoir besoin d'une extension spéciale pour cela.

1

"PHP Warning: mail(): Impossible d'exécuter le programme de livraison de courrier"

... signifie exactement ce qu'il dit sur l'étain. PHP remettra simplement l'email à un programme externe sur un système Linux/Unix/POSIX (tel que défini par sendmail_path dans php.ini). Et dans certains cas, cela renvoie une erreur. Ce n'est pas une faute dans le code PHP.

Sauf si vous avez un MTA vraiment mal configuré, le problème ne sera pas résolu en utilisant une connexion SMTP à la place.

Vous devez consulter les journaux de votre agent MTA pour savoir pourquoi il n'a pas envoyé le courrier ou encapsulé l'exécutable de messagerie dans un script de journalisation.

2

Vous pouvez utiliser PEAR's Mail_Queue package pour envoyer directement des messages via un serveur SMTP. Cela fonctionnera également en arrière-plan et ne retardera ni n'augmentera le temps d'exécution de votre script. Un autre avantage de l'utilisation du paquet Mail_Queue est que vous pouvez récupérer l'identifiant esmtp de chaque mail envoyé à des fins de journalisation - je ne sais pas si cela est possible avec le composant Zeta Mail ou tout autre.

J'ai développé un certain nombre de solutions destinées au public, mais aussi à l'intranet, qui utilisent ce composant et qui n'ont rencontré aucun problème majeur.

Questions connexes