MISE À JOUR : (29/02/12) J'ai rencontré le même problème pour un autre client sur un serveur et un hébergeur complètement différents.
Encore une fois, avoir un script avec juste mail() envoie l'email correctement sans aucun problème. J'ai ensuite ajouté un code similaire à celui que j'ai ci-dessous et je l'ai relié à paypal IPN. Chaque fois qu'un nouveau paiement est effectué, l'IPN se déclenche, les données sont enregistrées dans la base de données mais la fonction mail() ne fonctionne pas.
Cependant, j'ai rencontré un problème intéressant. J'ai fait un test IPN depuis le bac à sable de Paypal avec le même script et l'email a été envoyé.
S'agit-il d'un problème avec la production IPN de paypals, peut-être la façon dont il envoie les données au script ?
Toute information à ce sujet serait extrêmement utile car ma solution actuelle utilisant des cronjobs est bâclée.
FIN UPDATE
J'ai mon écouteur IPN de Paypal configuré correctement puisqu'il écrit toutes les informations dans la base de données lorsqu'un nouveau paiement est reçu. J'essaie maintenant de configurer une fonction mail() qui m'envoie une alerte par courriel lorsqu'un nouveau paiement est effectué.
Je l'ai déjà fait pour un autre projet, mais je n'arrive pas à comprendre pourquoi cela ne fonctionne pas cette fois-ci. Je ne reçois aucune erreur dans le journal des erreurs et le reste du script s'exécute bien.
J'ai testé pour m'assurer que le serveur envoie effectivement du courrier avec un script autonome mail() script. Je suis vraiment perdu et confus ici.
Voici le code que j'ai :
mail('test@email.com', 'New Order', 'New Order', 'From: support@website.com');
define("_VALID_PHP", true);
require_once('../php/init.php');
$item_number = $_POST['item_number'];
$payment_gross = $_POST['payment_gross'];
$payment_status = $_POST['payment_status'];
$payer_email = $_POST['payer_email'];
$txn_id = $_POST['txn_id'];
if ($payment_status == 'Completed') {
$query = $db->query("SELECT price, id, uid FROM invoice WHERE md5='$item_number'");
$row = $db->fetch($query);
$iid = $row['id'];
$uid = $row['uid'];
if ($row['price'] == $payment_gross){
$invoiceUpdate['paid'] = 1;
$update = $db->update('invoice', $invoiceUpdate, "md5='$item_number'");
}
}
$data['iid'] = $iid;
$data['uid'] = $uid;
$data['payment_status'] = $payment_status;
$data['payer_email'] = $payer_email;
$data['payment_gross'] = $payment_gross;
$data['txn_id'] = $txn_id;
$db->insert('payment', $data);