IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Mail] PHP et envoi d'email avec PHPmailer


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut [Mail] PHP et envoi d'email avec PHPmailer
    Bonjour,

    J'ai crée un code qui permet aux utilisateurs de mon site d'envoyer des messages à d'autre utilisateur via un formulaire de contact seulement voila les messages ne sont pas toujours envoyés et je vois pas pourquoi ca fonctionne dans certain cas et pas dans d'autres. Si vous avez une idee n'hesitez pas. Voici le code de ma page pour envoyer le message. Je recupere la variable $emailfrom sur la page precedente à l'aide d'un formulaire.

    Code : 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
    49
    50
    51
    52
     
     
    <? include("_connexion.php"); ?>
    <?
    $message=""; if(!empty($_POST["message"])) $message=$_POST["message"];
    $subject=""; if(!empty($_POST["subject"])) $subject=$_POST["subject"];
    $emailto=""; if(!empty($_POST["emailto"])) $emailto=$_POST["emailto"];
    $idad=""; if(!empty($_POST["idad"])) $idad=$_POST["idad"];
    $memberfrom=""; if(!empty($_POST["memberfrom"])) $from=$_POST["memberfrom"];
    $memberto=""; if(!empty($_POST["memberto"])) $to=$_POST["memberto"];
    $emailfrom=""; if(!empty($_POST["emailfrom"])) $emailfrom=$_POST["emailfrom"];
    ?>
     
    <?
    require("c:\php\includes\class.phpmailer.php");
     
     
    	$mail = new PHPMailer();
    	$mail->IsSMTP();
    	$mail->Host = 'monhost';
    	$mail->SMTPAuth = true;
    	$mail->Username = 'monusername';
    	$mail->Password = 'monpassword';
    	$mail->From = "$emailfrom";
    	$mail->FromName = "$memberfrom";
    	$mail->IsHTML(true);
    	$mail->Body = "$message";	
    	$mail->Subject = "$subject";
        $mail->AddAddress("$emailto");
    	$mail->AddReplyTo("$emailfrom");
     
    	if (@$mail->Send()){
    		$result = "Merci,<br>\r\n message envoyé.\r\n";
    	}else{
    		$result = "Désolé,<br>\r\n Erreur";
    	}
    ?>
     
     
    <!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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Untitled Document</title>
    </head>
     
    <body>
     
     
    </body>
    </html>
    <? mysql_close(); ?>

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    d'abord, j'enleverai les " " autours des nom de variables quand tu les assignes aux propriétés de ta class...

    Ensuite, as-tu des exemples de cas ou ça passe et de cas ou ça passe pas ? est-ce que pour ceux pour qui ça passe passe a chaque fois, ou est-ce aléatoire ?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Dans un premier temps, tu ferais effectivement bien de nettoyer le code.
    • "$variable" et $variable sont identiques mais le 2° est plus intuitif (et plus rapide à exécuter).
    • ?> <? : complètement inutile
    • remplace <? par <?php
    • utilise un chemin relatif dans require()
    • que fait là le mysql_close() alors qu'il n'y a visiblement pas de mysql_open() ?
    remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message=""; if(!empty($_POST["message"])) $message=$_POST["message"];
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!empty($_POST["message"]) and trim($_POST["message"]) != ''){
       $message = trim($_POST["message"]);
    }
    else{
       $message="";
    }
    (et fais pareil pour toutes les variables)

    Pour terminer, quelques liens :
    Envoyer des mails simplement avec PHP et la classe PHPMailer
    Apostrophes ou guillemets : lesquels choisir ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Yogui
    Salut
    [*]que fait là le mysql_close() alors qu'il n'y a visiblement pas de mysql_open() ?[/LIST]remplace :
    C'est pour fermer ma connexion à la base. Je debute et j'ai repris ca sur un site sérieux. Pourquoi c pas bon?

    remplace :
    Code :

    $message=""; if(!empty($_POST["message"])) $message=$_POST["message"];

    par :
    Code :

    if(!empty($_POST["message"]) and trim($_POST["message"]) != ''){ $message = trim($_POST["message"]); } else{ $message=""; }

    (et fais pareil pour toutes les variables)

    Qu'est ce que ce code a de mieux que celui que j'utilise. Comme je t'ai dit je debute et j'aime bien comprendre ce que je fais. Et pourquoi ne pas utiliser tout simplement

    $message=$_POST["message"]???


    Merci pour ton aide. L'envoi d'email fonctionne tres bien.

    Est ce qu'il ne serait pas mieux d'ajouter mes les donnees pour se connecter a mon service mail dans mon fichier _connexion.php?

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Arf, je n'avais pas fait attention à ton fichier de connexion. Cependant, puisque tu n'utilises pas la base de données de tout le script, il n'est peut-être pas nécessaire de faire cette connexion.

    Rapport à mysql_close(), PHP se charge de fermer la connexion à la fin du script : tu n'as vraiment pas besoin de l'appeler mais tu fais comme tu le souhaites. C'est correct mais inutile.

    Pour le if(), tu fais comme tu veux aussi...
    Avec ta solution, tu commences par affecter la variable puis par remplacer sa valeur si besoin. Avec ma méthode, tu ne donnes à ta variable que la valeur qu'elle a besoin. Ça donne exactement le même résultat, c'est juste organisé différemment.

    Ceci est incorrect :
    $message=$_POST["message"];
    En effet, la variable $_POST["message"] n'existe pas nécessairement, ce qui peut (devrait) conduire à une erreur dans certains cas. C'est pour cette raison que je teste avec !empty().Maintenant, si tu souhaites apprendre davantage de choses sur PHP, je te recommande de jeter un oeil à notre page de cours et à notre FAQ :
    http://php.developpez.com/cours/
    http://php.developpez.com/faq/

    Plus généralement :
    http://php.developpez.com/

    Bonne continuation

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    merci beaucoup.
    Une dernière petite chose si ca te derange pas. Dans les formulaires comment est ce qu'on gère les caractères du style : ' car ca rajoute des \\\\\\\à ne plus savoir quoi en faire et du coup l'info n'est pas toujours enregistree dans la base.
    Dolf

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    J'imagine que ton php.ini a mis les magic_quotes_gpc à on, ce qui fait que PHP ajoute \ devant les ' et "... Elle devrait être à off.

    La meilleure solution pour toi est de lire la documentation de la fonction mysql_real_escape_string().
    Une alternative est la fonction stripslashes().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi d'email avec php
    Par -Fly- dans le forum Langage
    Réponses: 2
    Dernier message: 06/11/2010, 12h24
  2. Pb envoi email avec PhpMailer
    Par FredR05 dans le forum Langage
    Réponses: 3
    Dernier message: 11/11/2009, 13h26
  3. Envoi de masse d'email avec PHPMailer ou autres
    Par camcam8782 dans le forum Langage
    Réponses: 2
    Dernier message: 04/10/2009, 12h48
  4. Envoie d'email avec system.net.mail
    Par urbanspike dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/06/2009, 08h53
  5. [Mail] envoi d'email avec php à l'aide de blat
    Par lahlousimo dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo