Fonction mail() et erreur 500

Résolu/Fermé
littaudio - 27 déc. 2007 à 17:37
 Saumon - 14 sept. 2010 à 20:50
Bonjour à tous,

Je gère un site sous Wordpress hébergé sur Online.net et j'utilise le plugin Ajax Newsletter. Lorsque je déclenche l'envoi de ma newsletter (un peu plus de 2000 abonnés), j'obtiens au bout d'un certain temps une erreur 500. Cela veut dire que le code est bon mais que le temps d'éxécution de la requête est trop long, si bien que seul les premiers inscrits à ma newsletter la reçoivent effectivement.

Je compte déménager chez 1&1 (offre Pack Pro Standard). À votre avis est-ce que je risque de rencontrer le même problème ? Et si oui, comment le contourner ? Un technicien de chez 1&1 m'a dit qu'il y aurait problème si le script n'appelait pas plusieurs pages. Qu'est-ce que cela signifie ?

Je joins les lignes de code qui éxécutent l'envoi de la newsletter dans mon script :

	/**
	 * Send the newsletter to all subscribers
	 * @param string $content The content to be send in the newsletter
	 * @param string $date The date to overwrite the last newsletter date (optional)
	 * 
	 * @return bool ture if all emails were sent, false if an error occured.
	 */
	function sendNewsletter($content, $date = ""){
		$members = ajaxNewsletter::getMembers("active");
		
		$header = get_option("snews_header");
		$footer = get_option("snews_footer");
		$subject = get_option("snews_subject");
		$from = get_option("snews_from");
		
		$sent = false;
		foreach ($members as $member){
			$to  = $member->email;
			$confirmationURL = get_bloginfo("wpurl") . "/wp-content/plugins/wp-ajax-newsletter/confirmation.php?del={$member->confkey}";
			$message = "";
			$message .= "$header\n\n";
			$message .= "$content";
			$message .= "$footer";
			$message = wordwrap($message, 200, "\n");
			
			if(!ajaxNewsletter::sendEmail($from,$to,"","",$subject,$message)){
				return false; //an error occured so we stop sending emails
			}
			$sent = true;
		}


D'avance merci pour vos réponses et vos suggestions.
A voir également:

4 réponses

Ohm-WorK Messages postés 1464 Date d'inscription mardi 25 octobre 2005 Statut Contributeur Dernière intervention 29 octobre 2019 420
28 déc. 2007 à 07:54
Salut

Le chargement, d'un point de vue serveur, d'un script PHP est généralement limité à une trentaine de seconde. Ceci pour une raison simple : une boucle infinie dans un script PHP ne s'arreterai jamais sur le serveur si celui ci n'y mettait pas fin. Perso, j'utilise ce type d'algorythme d'envoie de mail bouclé sur une requète SQL pour l'envoie de mail à des abonnés, mais ca concerne moins de 100 personnes. Pour 2000 personnes c'est énorme, tu sera bloqué par tous les hébergeurs, et c'est normal. Essaye d'envoyer 2000 mails à la suite avec outlook ou thunderbird, tu verra le temps qu'il va prendre !!!

La bonne solution pour une newsletter de cet ampleur, c'est d'utiliser une liste de diffusion. En plus, online t'en fournit une :)

A++
0
Merci beaucoup pour ces éclaircissements. Sais-tu si je pourrais contourner le problème avec un serveur dédié ? (ou est-ce que le délai de 30 secondes est intrinsèque au langage PHP lui-même ?)
0
Bonjour,

Vous envoyez des newsletter depuis online.net, bonne nouvelle, donc : c'est possible !
Pourriez-vous me dire quels paramètres utiliser pour l'envoi chez eux ?

Je n'arrive pas à configurer mes envois...
PHP ?
quel Sendmail Path ?

Merci d'avance pour vos réponses,

Véronique
0
Bonjour,

Oui ça devrait marcher si vous n'avez pas trop de destinataires, en PHP.

Il me semble en revanche que Online.net n'accepte pas la fonction mail(), mais la remplace par la fonction email() dont les paramètres sont les suivants :

email($from, $to, $sujet, $message, $ReplyTo, "Return-path: uneadresse@email") ;


Les deux derniers paramètres (ReplyTo et Return-path) étant facultatifs.

Mais tout ça est de mémoire...

Une recherche Google à "fonction email online.net" devrait aider.
0
Hello,

Alors oui concernant la fonction mail, elle fonctionne bien chez online.net.
POur les envois groupés de mail, surchargez leur config PHP en implantant votre propre php.ini à la racine de votre site /www/
Reprenez leurs variables locales ( typiquement les url de sessions etc )
Ca permet de pas mal bricoler le comportement du serveur ...
Bien pratique

++
0