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 :

formulaire de contact


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut formulaire de contact
    Bonjour,

    J'ai un fomulaire de contact PHP qui fonctionnait jusqu'à il y a 15 jours t depuis plus rien. Les demandes de clients ne parviennent plus sur mon adresse mal. Je n'ai plus de retour sur mon adresse mail qui est destinataire de la page de contact php. Ni dans les spams !
    C'est inquiétant car je ne reçois plus les messages et demandes de mes clients.

    J'ai contacté mon hébergeur O2switch qui me dit qu'actuellement j'utilise une fonctionnalité de PHPMail qui peut rencontrer des erreurs d'authentifications vu que je ne bénéficie pas "des spf et dkim de l'hébergement".
    Il me dit de modifier ou de remplacer le script utilisé pour passer par nos serveurs SMTP ?

    J'ai essayé avec PHPMailer mais je rencontre des problèmes.

    Je vous remercie pour votre aide.
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    //on regarde si le formulaire est envoyé
    if(!empty($_POST)){
    	//si oui on extrait les données
    	extract($_POST);
    	$valid = true;
    	//on place un antispam
    	if($adress != ""){
    	}
    	else{
    	//on regarde si le nom est valide
    	if(empty($name)){
    		//si oui on déclare l'erreur
    		$valid = false;
    		$erreurnom = "You didn't write your name!";
    	}
    	if(!preg_match('/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,3})+$/', $email)){
    		$valid = false;
    		$erreuremail = "Error e-mail address!";
    	}
    	if(empty($email)){
    		$valid = false;
    		$erreuremail = "You didn't write your e-mail address!";
    	}
    	if(empty($subject)){
    			$valid = false;
    		$erreursujet = "What's going on?";
    	}
     
    	if(empty($message)){
    		$valid = false;
    		$erreurmessage = "Your didn't write your message!";
    	}
     
    	if ($valid){
    		$to = "adm.mib33@gmail.com";
    		$sujet = $name. " a posté une question depuis le site de l'école";
    		$subject = "";
    		$header = "From: $name <$email> \n";
    		$message = stripslashes($message);
    		$name = stripslashes($name);
    		// copie ? (envoie une copie au visiteur)
    		$copie = 'oui';
    		// envoyer une copie au visiteur ?
    		if ($copie == 'oui')
    		{
    			$cible = $to.','.$email;
    		}
    		else
    		{
    			$cible = $to;
    		};
    		if(mail($cible,$sujet,$message,$header)){
    			$erreur = "Your message has been sent!";
    			unset($name);
    			unset($email);
    			unset($subject);
    			unset($message);
    		}
    		else{
    		$erreur2 = "An error occured and your message hasn't been sent!";
    		}
    	}
    	}
    }
    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
    <?php /*?><?php if (isset($erreur)){ echo "<p>$erreur</p>"; } ?><?php */?>
                    <?php if (isset($erreur)){ echo "<p class=\"alert alert-success\">$erreur</p>"; } ?>
                    <?php /*?><?php if (isset($erreur2)){ echo "<p>$erreur2</p>"; } ?><?php */?>
                    <?php if (isset($erreur2)){ echo "<p class=\"alert alert-danger\">$erreur2</p>"; } ?>
     
              <form name="montessori" id="contactForm" method="post" action="../html/contact.php">
                      <div class="col-lg-6">
     
                        <p><label for="name"> </label>
                      <input type="text" name="name" id="name" placeholder="Name" autocomplete="off" tabindex="1" class="input-cont-textarea" value="<?php if (isset($name)) echo $name; ?>">
                      <span class="error-message">
                       <?php if(isset($erreurnom)) echo $erreurnom; ?>
                      </span>
                      </p>
                      </div>
                      <div class="col-lg-6">
     
                         <p><label for="email"></label>
                      <input type="email" name="email" id="email" placeholder="E-mail address" autocomplete="off" tabindex="3" class="input-cont-textarea" value="<?php if (isset($email)) echo $email; ?>">
                      <span class="error-message">
                      <?php if(isset($erreuremail)) echo $erreuremail; ?>
                      </span>
                      </p>
                      </div>
                      <div class="col-lg-12">
                        <!--<p class="text_cont"><input type="text" name="subject" placeholder="Quelle est votre question ?" class="input-cont-textarea"></p>-->
                        <p><label for="subject"> </label>
                      <input type="text" name="subject" id="subject" placeholder="Ask something" autocomplete="off" tabindex="1" class="input-cont-textarea" value="<?php if (isset($subject)) echo $subject; ?>">
                      <span class="error-message">
                       <?php if(isset($erreursujet)) echo $erreursujet; ?>
                      </span>
                      </p>
                      </div>
     
                      <div class="col-lg-12">
                        <!--<p class="text_cont"><textarea name="message" placeholder="Message" id="message" class="input-cont-textarea" cols="40" rows="10"></textarea></p>-->
                       <!-- <p class="text_cont">-->
                       <p> 
                       <textarea name="message" placeholder="Write your message..." id="message" tabindex="5" class="input-cont-textarea"  cols="40" rows="10"><?php if (isset($message)) echo $message; ?></textarea>
                        <span class="error-message">
                      <?php if(isset($erreurmessage)) echo $erreurmessage; ?>
                      </span>
                      </p>
                       <p class="alert text-danger">*Fields required</p>
                      </div>
                      <div class="col-lg-12">
                      <p>
     
                      <input type="submit" id="submitbtn" class="btn btn-default" value="Send message" tabindex="7"/>
                      </p>
                      </div>
                    </form>
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Si tu rencontres des problèmes, il faudrait nous dire les quels ainsi que les potentiels messages d'erreur.
    Pour ce qui est de PHPMailer, tu dis l'essayer mais dans le code que tu nous montre il n'en est pas du tout question

  3. #3
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Merci pour ta réponse et ton aide.

    J'ai fait des essais et placé le script suivant :
    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
    <?php
        //$msg = "";
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    //include_once "../PHPMailer/PHPMailer.php";
    //include_once "../PHPMailer/Exception.php";
    //include_once "../PHPMailer/SMTP.php";
     
    if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    require '../PHPMailer/PHPMailer.php';
    require '../PHPMailer/Exception.php';
    require '../PHPMailer/SMTP.php';
     
    $mail = new PHPMailer(true);
    try{
     
    //if we want to send via SMTP
    $mail ->SMTPDebug = 0;
    $mail->Host = "xxx.o2switch.net";
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->Username = "user@nomdedomaine.frr";
    $mail->Password = "5*****";
    $mail->SMTPSecure = "ssl"; //TLS
    $mail->Port = 465; //587
     
    $mail->addAddress('societe@gmail.com');
    $mail->setFrom($email, $name);
    $mail->subject = $name. " a posé une question depuis le site internet";
    $mail->isHTML(true);
    $mail->Body = $message;
    //$mail->addAttachment($file);
     
    $mail->send();
       echo 'Bravo ! Votre message a été envoyé avec succès !';
    }
    catch (Exception $e) {
       echo 'Le message n\'a pas pu être envoyé ! Pouvez-vous réessayer !', $mail -> ErrorInfo;
    }}
    else {
    echo "message non envoyé";
    }
    ?>
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="post" action="sendemail.php" enctype="multipart/form-data">
    					<input class="form-control" name="subject" placeholder="Subject..."><br>
    					<input class="form-control" name="email" type="email" placeholder="Email..."><br>
    					<textarea placeholder="Message..." class="form-control" name="message"></textarea><br>
    					<input class="form-control" type="file" name="attachment"><br>
    					<input class="btn btn-primary" name="submit" type="submit" value="Send Email">
    				</form>
    le problème est que je ne récupère pas l'adresse mail du client (c'est mon adresse serveur qui apparait) :

    De: robert <user@nomdedomaine.fr>
    à: societe@gmail.com
    Date: 17 févr. 2020 15:39
    Objet: robert a posé une question depuis le site internet
    signé par: education-montessori.fr
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Tu vas me trouver relou mais qu'entends-tu par "récupérer l'adresse mail du client" ?
    Tu veux dire que dans ton message tu ne vois pas l'email du client ? Pourtant, c'est lui le sender et on le voit dans ce que tu as copié/collé ::thinking::

    A ce propos, il ne faut surtout pas utiliser l'adresse du client en tant que sender, et c'est au moins en partie à cause de ça que tu ne reçois pas les emails avec ton ancien code.

    En effet, admettons que je remplisse ton formulaire de contact (hébergé sur TON serveur donc), et que je rentre une adresse @mon-domaine.org.
    mon-domaine.org a son SPF configuré pour dire que je peux envoyer des mails de MON SMTP et depuis MON serveur.
    Or toi, tu essayes d'envoyer un email en tant que @mon-domaine.org depuis TON serveur. Le SPF va retourner "Houlalala mon grand ! Non, tu ne peux pas !" .
    Suivant la config du SPF (sur le domaine @mon-domaine.org donc), le mail :
    • va être distribué quoi qu'il arrive (+all)
    • va être distribué mais en spam (~all)
    • ne va tout simplement pas être distribué (-all)


    Donc déjà, la première chose à faire est de changer la façon dont tu envoies les emails (que ça soit via SMTP ou non).
    1. Le sender (From) : c'est toi où une autre adresse email de ton domaine (existante ou non mais il vaut souvent mieux qu'elle existe), et pour la quelle le domaine à le droit de faire des envois
    2. Recipient (To) : pas de changements là-dessus
    3. Headers : Ajouter un header Reply-To avec l'adresse email de la personne qui a rempli le formulaire de contact afin de pouvoir utiliser la fonction "Répondre" quand tu lis un email

  5. #5
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Je te remercie pour ton attention et c'est moi qui suis relou car je ne maitrise pas bien PHP. Je me suis fait aider pour cela mais ça ne suffit pas.
    En gros je voudrais un formulaire de contact simple qui me retourne le nom, le message et l'adresse mail du client qui fait une demande depuis la page contact.php.
    Ça marchait jusqu'à il y 2 semaines.
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  6. #6
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 99
    Points : 228
    Points
    228
    Par défaut
    Bonjour, dans le message de 10h04, le champ subject n'est jamais lu côté PHP (pas de $_POST['subject']) et la variable $_POST['name'] est toujours vide (pas de champ dans le formulaire).

  7. #7
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Merci @Trehinos je vais tester.
    Existe-t-il un formulaire simple qui réponde aux conditions indiquées par le serveur ?
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  8. #8
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Je suis en train de chercher des formulaires de contact prêt à l'emploi et ne parvient pas à avoir l'assurance qu'ils répondent aux exigences du serveurs.

    Avez-vous une idée ?
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  9. #9
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 99
    Points : 228
    Points
    228
    Par défaut
    Aucune... je code toujours moi-même... mais la partie HTML est triviale, c'est le PHP et l'envoi de l'e-mail qui peut être un peu plus compliqué... Vous n'étiez pas loin de la solution, pourtant...

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par rodolphebrd Voir le message
    Je suis en train de chercher des formulaires de contact prêt à l'emploi et ne parvient pas à avoir l'assurance qu'ils répondent aux exigences du serveurs.

    Avez-vous une idée ?
    Bonjour,

    Les exigences du serveur (des domaines en réalité) c'est à toi de les respecter, pas le script ;-)
    Je te renvoie à mon post précédent où j'ai tout expliqué

    La règle est simple : tu ne peux envoyer des emails "en tant que" que depuis un serveur et/ou un domaine qui en a le droit.
    Par exemple :
    Si ton serveur a le droit d'envoyer des emails "en tant que" (From:) le domaine mon-super-domaine.com, alors les emails devraient être réçus (au pire dans les spams) si tu envoies depuis : From: noreply@mon-super-domaine.com (même si l'adresse email n'existe pas)
    A l'inverse, si tu tentes d'envoyer des emails en mon nom (From: moi@developpez.net) en utilisant l'adresse email que J'AI renseigné dans le formulaire de contact, là tu as presque 100% de chance d'arriver dans les spams, et de grandes chances de ne jamais arriver du tout !

    Je ne vais pas entrer dans les détails des spams ici, l'essentiel est que les emails soient reçus.

    PS : Théoriquement, avant, il faudrait quand même s'assurer que les emails sont bel et bien envoyés ^^

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Rodolphe What's up ?

    Bon. J'ai repris tout ton code, selon mon PRINCIPE de FORMULAIRE et TRAITEMENT sur la même page.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    <?php if( empty(session_id()) ){ session_start(); } // démarrage SESSION
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    // -----------------------
    // PHPMailer - v6
    // Import PHPMailer classes into the global namespace (These must be at the top of your script, not inside a function)
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    // -------------
    // Initialisation
    $form_valid = 0;
    // 0 : par défaut, on affiche le formulaire
    // 1 : PAS d'erreur : OK, traitement
    // 2 : ERREUR : on ré-affiche le formulaire
     
    $form_msg_err = ''; // message en cas d'erreur
    $form_msg_OK = ''; // message en cas de succès
    $form_msg_err = array();
     
    // -----------------------
    // SI le formulaire a été soumis
    if ( isset($_POST['envoi_form'])
        && isset($_SESSION['random_OK'], $_POST['randomformOK'])
    	&& $_POST['randomformOK']==$_SESSION['random_OK'] ) 
    {
    	// -----------------------
    	// TRAITEMENT
    	// -----------------------
    	// 1/ RECUPERATION des données du formulaire
    	// En cas de erreur, on pourra ré-afficher ces données dans le formulaire
    	$contact['name'] = (isset($_POST['name']))? 		htmlspecialchars($_POST['name']) : '';
    	$contact['email'] = (isset($_POST['email']))? 		htmlspecialchars($_POST['email']) : '';
    	$contact['subject'] = (isset($_POST['subject']))? 	htmlspecialchars($_POST['subject']) : '';
    	$contact['message'] = (isset($_POST['message']))? 	htmlspecialchars($_POST['message']) : '';
     
    	// -----------------------
    	// 2/ GESTION DES ERREURS (champs obligatoires, validité email,...)
    	// ----------
    	// Vérification du Nom
    	if( empty($contact['name']) )
    	{
    		$form_valid = 2;
    		$form_msg_err['name'] = "You didn't write your name!";
    	}
    	// ----------
    	if( empty($contact['email']) )
    	{
    		$form_valid = 2;
    		$form_msg_err['email'] = "You didn't write your e-mail address!";
    	}
    	// Vérification du format de l'Email
    	if( !empty($contact['email']) && !filter_var($contact['email'], FILTER_VALIDATE_EMAIL) ){
    		$form_valid = 2;
    		$form_msg_err['email'] = "Your e-mail address is not valid!";
    	}
    	// ----------
    	// Vérification du subject
    	if( empty($contact['subject']) )
    	{
    		$form_valid = 2;
    		$form_msg_err['subject'] = "What's going on?";
    	}
    	// ----------
    	// Vérification du message
    	if( empty($contact['message']) )
    	{
    		$form_valid = 2;
    		$form_msg_err['message'] = "You didn't write your message!";
    	}
    	// ----------
    	if($form_valid != 2)
    	{
    		$form_valid = 1; // OK si pas de erreur
    	}
     
    	// -----------------------
    	// 3/ TRAITEMENT SI PAS d'erreur
    	if($form_valid == 1)
    	{
    		// ---------------------
    		$mailer_data = array();
    		// ----------
    		// From
    		$mailer_data['FromEmail'] = $contact['email'];
    		$mailer_data['FromName'] = $contact['name'];
    		// ----------
    		// Destinataire
    		$mailer_data['ToEmail'] = "adm.mib33@gmail.com";
    		$mailer_data['ToName'] = "école";
    		// copie ? (envoyer une copie au visiteur)
    		$mailer_data['IsCopy'] = true;
    		// ----------
    		// Subject / Message
    		$mailer_data['Subject'] = $contact['subject'];
    		$mailer_data['Body'] = "
    		<p>" . $contact['name']. " a posté une question depuis le site de l'école.</p>
    		<p>Email : " . $contact['email'] . "</p>
    		<p>Subject : " . $contact['subject'] . "</p>
    		<p>Message : " . $contact['message'] . "</p>
    		";
    		// ---------------------
    		// PHPMAILER - v6
    		require_once('_phpmailer/vendor/autoload.php'); // indiquer le CHEMIN correct
    		// ---------------------
    		$mail = new PHPMailer;
    /*
    		$mail->IsSMTP(); 							// Set mailer to use SMTP
    		$mail->Host = 'smtp.xxxxxxxxxxx.fr';		// Specify main and backup server
    		$mail->Port = 587;							// Set the SMTP port
    		$mail->SMTPAuth = true;						// Enable SMTP authentication
    		$mail->Username = 'xxxxxxxxx';				// SMTP username
    		$mail->Password = 'xxxxxxxxx';				// SMTP password
    */
    		// ---------------------
    		// Email Formaté HTML
    		$mail->CharSet 			= 'UTF-8';
    		$mail->IsHTML(true);	// true : HTML
    		// ----------
    		// FROM
    		$mail->setFrom( $mailer_data['FromEmail'], $mailer_data['FromName'] );
    		// ----------
    		// DESTINATAIRE de l'e-mail :
    		$mail->AddAddress( $mailer_data['ToEmail'], $mailer_data['ToName'] );
    		// ----------
    		// MAIL EN COPIE
    		if( $mailer_data['IsCopy'] )
    		{
    			$mail->addCC( $mailer_data['FromEmail'], $mailer_data['FromName'] );
    		}
    		// ----------
    		// Subject
    		$mail->Subject  		= $mailer_data['Subject'];
    		$mail->Body				= $mailer_data['Body'];
    		// ---------------------
    		// --> ENVOI du MAIL
    		if( $mail->Send() ) // ENVOI + OK
    	//	if( true )	// pour TEST !!
    		{
    			$valid_Contact 		= 1;
    			$form_msg_OK = "Your message has been sent!";
    		} 
    		// ----------
    		else { // ECHEC
    			$valid_Contact 		= 2;
    			$form_msg_err['envoi'] = "An error occured and your message hasn't been sent!";
    		}
    	}
    	// -----------------------
    }
    unset($_POST);
    // -----------------------
    // Protection contre "actualiser la page" ou envoi depuis l'extérieur (vol de formulaire)
    $_SESSION['random_OK'] = uniqid(); // identifiant unique
    // -----------------------
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <!-- ........ -->
    </head>
    <body>
     
    <?php
    // -----------------------
    // Affichage du formulaire
    if ( $form_valid == 0 || $form_valid == 2 )
    {
    ?>
    <?php    if ($form_valid == 2 && !empty($form_msg_err['envoi']) ){ // Affichage message d'erreur ?>
    	<p class="alert alert-danger"><?php echo $form_msg_err['envoi']; ?></p>
    <?php    } ?>
     
    	<form name="montessori" id="contactForm" method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> <!-- action sur la même page -->
    	<input type="hidden" name="randomformOK" value="<?php echo $_SESSION['random_OK']; ?>" />
    	<div class="row">
    		<div class="col-lg-6">
    			<p>
    				<label for="name"> </label>
    				<input type="text" name="name" id="name" placeholder="Name" autocomplete="off" tabindex="1" class="input-cont-textarea" value="<?php echo (isset($contact['name']))? $contact['name'] : ''; ?>">
    				<?php if(isset($form_msg_err['name'])){ ?><span class="error-message"><?php echo $form_msg_err['name']; ?></span><?php } ?>
    			</p>
    		</div>
    		<div class="col-lg-6">
    			<p>
    				<label for="email"></label>
    				<input type="email" name="email" id="email" placeholder="E-mail address" autocomplete="off" tabindex="3" class="input-cont-textarea" value="<?php echo (isset($contact['email']))? $contact['email'] : ''; ?>">
    				<?php if(isset($form_msg_err['email'])){ ?><span class="error-message"><?php echo $form_msg_err['email']; ?></span><?php } ?>
    			</p>
    		</div>
    		<div class="col-lg-12">
    			<p>
    				<label for="subject"> </label>
    				<input type="text" name="subject" id="subject" placeholder="Ask something" autocomplete="off" tabindex="1" class="input-cont-textarea" value="<?php echo (isset($contact['subject']))? $contact['subject'] : ''; ?>">
    				<?php if(isset($form_msg_err['subject'])){ ?><span class="error-message"><?php echo $form_msg_err['subject']; ?></span><?php } ?>
    			</p>
    		</div>
    		<div class="col-lg-12">
    			<p> 
    				<textarea name="message" placeholder="Write your message..." id="message" tabindex="5" class="input-cont-textarea"  cols="40" rows="10"><?php echo (isset($contact['message']))? $contact['message'] : ''; ?></textarea>
    				<?php if(isset($form_msg_err['message'])){ ?><span class="error-message"><?php echo $form_msg_err['message']; ?></span><?php } ?>
    			</p>
    			<p class="alert text-danger">* All fields are required</p>
    		</div>
    		<div class="col-lg-12">
    			<p>
    				<input type="submit" id="submitbtn" name="envoi_form" class="btn btn-default" value="Send message" tabindex="7"/>
    			</p>
    		</div>
    	</div>
    	</form>
     
    <?php 
    } 
    // -----------------------
    // Affichage si traitement OK 
    else { 
    ?>
     
    <?php    if ( !empty($form_msg_OK) ){ // Affichage message OK ?>
    		<p class="alert alert-success"><?php echo $form_msg_OK; ?></p>
    <?php    } ?>
     
    	<!-- ....(lien "retour à l'accueil" ou autre...).... -->
     
    <?php 
    } 
    ?>
     
    </body>
    <html>
    Tu peux télécharger l'archive "_phpMailer" (qu'il suffit alors de dézipper : prêt à l'emploi) ici :



    Pour la partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$mail->IsSMTP(); 							// Set mailer to use SMTP
    		$mail->Host = 'smtp.xxxxxxxxxxx.fr';		// Specify main and backup server
    		$mail->Port = 587;							// Set the SMTP port
    		$mail->SMTPAuth = true;						// Enable SMTP authentication
    		$mail->Username = 'xxxxxxxxx';				// SMTP username
    		$mail->Password = 'xxxxxxxxx';				// SMTP password
    Là, il faut voir avec ton hébergeur.
    Dernière modification par Invité ; 20/02/2020 à 15h20.

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Hello,

    Comme je l'ai dit plus haut, ce n'est pas parce qu'on va passer par un SMTP que ça ira mieux ^^
    Donc je me répète pour être sûr : il ne faut absolument pas utiliser l'adresse email du formulaire de contact en tant que From: mais (pour le coup) un domaine certifié par le serveur SMTP (si on envoie du SMTP)

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		// ----------
    		// From
    		$mailer_data['FromEmail'] = $contact['email'];
    		$mailer_data['FromName'] = $contact['name'];
    peut/doit être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		// ----------
    		// From
    		$mailer_data['FromEmail'] = 'contact@nom-du-domaine.com'; // ou noreply@....
    		$mailer_data['FromName'] = 'Contact';
    Quant aux nom et email du client, il sont inscrits dans le contenu du message.


    N.B. Cela dit, sur mes sites (FAI : OVH), je mets bien les coordonnées du client, et je reçois bien les mail !
    Mais effectivement, ça peut dépendre de la politique du FAI en matière de "sécurité/SPAM".

  14. #14
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Merci les gars pour vos réponses.

    Merci jreaux62 pour ton aide, beaucoup, beaucoup de travail.

    Je test tout ça ce week-end.

    Je suis vraiment content de voir que la communauté develppez.Com reste aussi sympa.
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  15. #15
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Bonjour Jreaux62,
    Le formulaire fonctionne mais le message n'est pas envoyé à l'adresse mail de l'école.
    Il n'apparait pas dans les spams non plus.

    C'est d'ailleurs un problème que j'avais signalé à l'hébergeur et il m'avait répondu cela :
    "Vous n'aviez pas placé le bon "from" sur l'envoi de mail. Le from doit obligatoirement être une adresse mail qui a été créé sur votre hébergement."
    il demande de rajouter cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Set who the message is to be sent from
    $mail->setFrom('from@example.com', 'First Last');
    Du coup je réalise qu'en changeant le from je ne peux pas récupérer l'adresse mail du client non plus.
    l'adresse du setfrom est la meme que username
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     //Username to use for SMTP authentication
    $mail->Username = 'yourname@example.com';
    Il s'agit des paramètres de PHPmailer:
    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
    //Create a new PHPMailer instance
    $mail = new PHPMailer;
    //Tell PHPMailer to use SMTP
    $mail->isSMTP();
    //Enable SMTP debugging
    // SMTP::DEBUG_OFF = off (for production use)
    // SMTP::DEBUG_CLIENT = client messages
    // SMTP::DEBUG_SERVER = client and server messages
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;
    //Set the hostname of the mail server
    $mail->Host = 'mail.example.com';
    //Set the SMTP port number - likely to be 25, 465 or 587
    $mail->Port = 25;
    //Whether to use SMTP authentication
    $mail->SMTPAuth = true;
    //Username to use for SMTP authentication
    $mail->Username = 'yourname@example.com';
    //Password to use for SMTP authentication
    $mail->Password = 'yourpassword';
    //Set who the message is to be sent from
    $mail->setFrom('from@example.com', 'First Last');
    //Set an alternative reply-to address
    $mail->addReplyTo('replyto@example.com', 'First Last');
    //Set who the message is to be sent to
    $mail->addAddress('whoto@example.com', 'John Doe');
    //Set the subject line
    $mail->Subject = 'PHPMailer SMTP test';
    //Read an HTML message body from an external file, convert referenced images to embedded,
    //convert HTML into a basic plain-text alternative body
    $mail->msgHTML(file_get_contents('contents.html'), __DIR__);
    //Replace the plain text body with one created manually
    $mail->AltBody = 'This is a plain-text message body';
    //Attach an image file
    $mail->addAttachment('images/phpmailer_mini.png');
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  16. #16
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Hello,

    Comme je l'ai dit plus haut, ce n'est pas parce qu'on va passer par un SMTP que ça ira mieux ^^
    Donc je me répète pour être sûr : il ne faut absolument pas utiliser l'adresse email du formulaire de contact en tant que From: mais (pour le coup) un domaine certifié par le serveur SMTP (si on envoie du SMTP)
    Merci pour ta réponse.
    Peut-on éviter le SMTP ?
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  17. #17
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 99
    Points : 228
    Points
    228
    Par défaut
    Le SMTP est le serveur d'envoi d'email (Simple Mail Transfer Protocol). Il est donc indispensable à ... l'envoi d'email. Je ne vois pas comment faire sans :/

  18. #18
    Invité
    Invité(e)
    Par défaut
    Relis mes/nos messages.
    J'ai l'impression que tu t'es contenté de copier-coller, sans lire ni comprendre.

  19. #19
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Relis mes/nos messages.
    J'ai l'impression que tu t'es contenté de copier-coller, sans lire ni comprendre.
    J'ai relu tout plusieurs fois et fait des essais.
    La chose qui me manque c'est de récupérer le message et l'adresse du client.
    Après je ne vais pas changer le code que tu m'as transmis/
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

  20. #20
    Expert confirmé
    Avatar de rodolphebrd
    Homme Profil pro
    Indépendant
    Inscrit en
    Novembre 2012
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 336
    Points : 5 443
    Points
    5 443
    Par défaut
    Le résultat est décent avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		// From
    		$mailer_data['FromEmail'] = 'contact@nom-du-domaine.com'; // ou noreply@....
    		$mailer_data['FromName'] = 'Contact';
    Merci à vous
    Pensez à
    lire les règles du forum effectuer une recherche préalable
    utiliser la balise code (#) éditer votre code sur Codepen, Dabblet, Jsfiddle
    clore votre post avec le bouton

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/01/2006, 07h23
  2. [Formulaire] de contact
    Par inferno66667 dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2005, 19h32
  3. Prob avec formulaire de contact
    Par inferno66667 dans le forum Langage
    Réponses: 1
    Dernier message: 01/12/2005, 18h53
  4. Prob avec PHP sur le formulaire de contact
    Par inferno66667 dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2005, 17h06
  5. Problème d'accès formulaire de contact
    Par Mystic26 dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 16h47

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