Bonjour à tous,

Mise en contexte :

J'héberge mes sites web chez un fournisseur quelconque et j'ai accès, par l'entremise d'un panneau d'administratif, à l'installation de packages PEAR. Avec quelques ajustements, j'ai réussi à faire fonctionner mon script pour envoyer les courriels dans la base de données

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
include 'config.php';
/* we use the db_options and mail_options here */
$mail_queue =& new Mail_Queue($db_options, $mail_options);
 
 
$from = 'xxx1@xxx.com';
$to = "xxx2@xxx.com";
$message = 'Hi! This is test message!! :)';
 
$hdrs = array( 'From'    => $from,
               'To'      => $to,
               'Subject' => "test message body"  );
 
/* we use Mail_mime() to construct a valid mail */
$mime =& new Mail_mime();
$mime->setTXTBody($message);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
 
 
/* Put message to queue */
for($i=0;$i<800;$i++){
  $mail_queue->put($from, $to, $hdrs, $body);
}

Code pris du tutoriel du site de PEAR

Contenu du fichier config.php

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
require_once "Mail/Queue.php";
require_once "MDB2.php";
 
// options for storing the messages
// type is the container used, currently there are 'creole', 'db', 'mdb' and 'mdb2' available
$db_options['type']       = 'mdb2';
// the others are the options for the used container
// here are some for db
$db_options['dsn']        = 'mysql://username:password@localhost/db';
$db_options['mail_table'] = 'mail_queue';
 
// here are the options for sending the messages themselves
// these are the options needed for the Mail-Class, especially used for Mail::factory()
$mail_options['driver']    = 'smtp';
$mail_options['host']      = 'xxx.xxx.com';
$mail_options['port']      = 25;
// $mail_options['localhost'] = 'localhost'; //optional Mail_smtp parameter
$mail_options['auth']      = false;
$mail_options['username']  = '';
$mail_options['password']  = '';

C'est mon script d'envoi de courriel qui ne fonctionne pas. Quand je load la page, ça me renvoi systématiquement une erreur de serveur interne (500)

Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
include 'config.php';
 
// How many mails could we send each time the script is called
$max_amount_mails = 20;
 
// we use the db_options and mail_options from the config again
$mail_queue =& new Mail_Queue($db_options, $mail_options);
 
// really sending the messages
$mail_queue->sendMailsInQueue($max_amount_mails);
 
$connexion = opendb();
list($count) = mysql_fetch_row(mysql_query("select count(*) from mail_queue"));
closedb($connexion);
 
@$output .= '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="fr-CA" xml:lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <title>TEST</title>
    <script type="text/javascript">
    var timer = 300;
    function timerRefresh(){
      timer = timer - 1;
      minutes = parseInt(timer / 60);
      secondes = timer - (minutes * 60);
      secondes = secondes.toString();
      if(secondes.length < 2) secondes = \'0\' + secondes;
      document.getElementById(\'timeleft\').innerHTML = minutes.toString() + \'m\' + secondes + \'s\';
      if(timer == 0) refreshPage();
      setTimeout(\'timerRefresh();\',1000);
    }
    function refreshPage(){
      document.location = \'sendmsg.php\';
    }
    </script>
</head>
<body>
Nombre de courriel restant à envoyer : '.$count.'<br />
<div style="float:left;">Temps avant le prochain envoi :&nbsp;</div><div style="float:left;" id="timeleft">5m00s</div>
<script type="text/javascript">
setTimeout(\'timerRefresh();\',1000);
</script>
</body>
</html>
';

Rien de trop compliqué ici, je ne pense pas que mon script javascript soit à l'origine de mon problème puisque la page ne se charge pas dutout. En fait, je dois compter environ 20 secondes de chargement avant que l'erreur 500 apparaisse. Dans ma base de données, rien n'a changé, mes 800 courriels sont toujours là en attente. Dans ma boîte de courriel, je n'ai toujours rien reçu.

J'ai fait le même test d'envoi de 800 courriels avec mail (sans mail_queue) et j'ai aussi eu une erreur 500, mais j'ai reçu les 800 courriels, 2 fois en fait puisque j'ai lancé mon script 2 fois !

J'aimerais savoir si parmi vous avez des idées sur ce qui se passe, si vous avez expérimenté des problèmes similaires. Tous les commentaires me seront utiles.

Merci 1000 fois !