Problème pour l'envoi d'un mail

Raymondo Menek
Invité n'ayant pas de compte PHPfrance

06 oct. 2007, 09:56

Bonjour à toute la communauté,
J'ai crée un système de newsletter.
Dans le principe, l'administrateur doit en premier lieu créer le contenu du message. Ceci se fait grâce à une interface équipée d'un éditeur Bbcode dans lequel l'admin va saisir son texte, inserer d'éventuelles images, etc...tout ceci étant ensuite stocké dans une des tables de la bd. Cette partie là fonctionne bien, je ne vous en parle que pour decrire un peu le contexte.

Viens ensuite l'envoi de la newsletter.
Avant d'envoyer le message à des milliers de destinataires, l'admin a la possibilité de faire un envoi personnel, c'est à dire (grâce à un formulaire) d'envoyer sa newsletter à une seule adresse, afin de voir si tout marche bien. C'est là où commence mon problème. Le destinataire reçoit un mail vide (le contenu crée au préalable n'apparaît pas dans le corps du message, sauf si le client est chez wanadoo par exemple...). Le même disfonctionnement se produit lorsque l'on tente un envoi en masse : une très petite quantité de destinataires reçoit le mail avec son contenu. La grande majorité des autres destinataires reçoit un mail vide.
Ci après, le code employé pour l'envoi personnel (ce sont les mêmes fonctions que pour l'envoi en masse).
Qu'en pensez vous???
Merci d'avance
<?php
/*|--------------------------------------------------------------|*/
/*|-----------Envoi personnel pour tester la newsletter----------|*/
/*|--------------------------------------------------------------|*/
//récupération des données
$objetmessage = $_POST['sujet'];
$nomcontenu = $_POST['listcontenu'];
            //récupération du contenu du mail
            $requete = "SELECT contenu FROM XXXXXXX WHERE nom = '".addslashes($nomcontenu)."'";
            $result = mysql_query($requete);
            $resultat = mysql_fetch_array($result);
$contenu = stripslashes($resultat['contenu']);
$adressperso = $_POST['emadress'];
//création et envoi du mail
$envoyer_les_mail = envoyer_les_mail($objetmessage,$contenu,$adressperso);
?>
<?php
/*MassMailing - création du mail*/
function envoyer_les_mail($objetmessage,$contenu,$adressperso)
{
//on crée le mail
// on génère une chaîne de caractères aléatoire qui sera utilisée comme frontière
  $boundary = "-----=" . md5( uniqid ( rand() ) );

  $headers  = "From: \"Francis\"<[email protected]>\n";
  // on indique qu'on a affaire à un email au format html et texte et
  // on spécifie la frontière (boundary) qui servira à séparer les deux parties
  // ainsi que la version mime
  $headers .= "MIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/alternative; boundary=\"$boundary\"";

  $message_txt  = $contenu."\n\n";
  $message_txt .= "This is an automatic mail, please do not answer to this email.\n\n";
  $message_txt .= "To unsubscribe, copy and paste the following adresse in your browser:\n";
  $message_txt .= "http://www.cetteadresseestfactice.com\n";

  $message_html  = "<html><body>".$contenu."\n\n";
  $message_html .= "<br><br><br><font face='Arial' size='2'>This is an automatic mail, please do not answer to this email.\n\n";
  $message_html .= "<br><br><font face='Arial'>To unsubscribe, click on following link:\n";
  $message_html .= "<a href='http://www.cetteadresseestfactice.com'>";
  $message_html .= "http://www.cetteadresseestfactice.com</a>";
  $message_html .= "</font></body></html>";

  $message  = "This is a multi-part message in MIME format.\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  //$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
  $message .= $message_txt;
  $message .= "\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
  //$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
  $message .= $message_html;
  $message .= "\n\n";
  $message .= "--" . $boundary . "--\n";

  //on envoi le mail
  $envoi_message = envoimail($adressperso,$objetmessage,$message,$headers);
}
?>
<?php
/*MassMailing - envoi d'un mail*/
function envoimail($adressperso,$sujet,$message,$headers)
{
mail($adressperso,$sujet,$message,$headers);
}
?>

Raymondo Menek
Invité n'ayant pas de compte PHPfrance

09 oct. 2007, 12:36

bon ben...c'est un bide ce post...:(

ViPHP
ViPHP | 1996 Messages

09 oct. 2007, 23:24

As tu regardé du côté du serveur SMTP ? (qui envoi les emails)

As tu testé chez autre hébergeur ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Raymondo Menek
Invité n'ayant pas de compte PHPfrance

09 oct. 2007, 23:42

J'ai avancé un petit peu depuis.
J'ai retesté l'ensemble de la procédure et du code chez moi, en local.
En fait : tout se passe merveilleusement bien depuis chez moi, en utilisant (pour l'envoi) la connexion de mon fournisseur d'accès.
Là où cela ne fonctionne plus, c'est quand je dépose mes scripts sur le serveur (un serveur d'entreprise).
D'un côté je suis rassuré car il n'y a visiblement pas d'erreur dans mon code (ca marche depuis chez moi).
D'un autre côté je suis un peu effrayé car j'ai l'impression d'être confronté à un pb "d'environnement". En clair (si c'est ca...) il va falloir que j'adapte mon code qui fonctionne aux particularités du serveur.
Comme si ce n'était pas suffisament compliqué comme ca.
Je renouvelle mon appel à la communauté. Voyez-vous qq chose dans mon code qui serait bancal ou maladroit, et qui pourrait expliquer cette situation???
Merci à tous :)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 oct. 2007, 23:47

Peut être regarder ceci :-k

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Raymondo Menek
Invité n'ayant pas de compte PHPfrance

10 oct. 2007, 00:00

Merci Truc. Cette doc a l'air trés complète...Peut-être contient-elle le détail qui va faire la différence.
Je vais y jeter un oeil attentif et je vous tiendrais au courant.