8768 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un code pour l'envoi d'un formulaire. Il fonctionne sauf que j'ai mon mail sur une seule ligne au lieu de :

Nom
Prénom
Téléphone
Mail
Message

$from="XXX"."\r\n"; // Nom de l'expéditeur du message
$from.="Content-type: text/html; charset=UTF-8"."\r\n"; // Pour passer le message en html
$sendTo = "XXX";
$subject = 'XXX';
$fields = array('name' => 'Nom', 'surname' => 'Prénom', 'phone' => 'Téléphone', 'email' => 'Email', 'message' => 'Message'); 


Ca le fait bien en format TXT, mais lorsque je passe en format HTML, j'ai tout à la ligne.
Modifié par Tintin75 (05 Jul 2016 - 15:08)
Modérateur
Bonjour, comment est généré le corps du message (pas indiqué dans le code). à partir de $fields je présume mais comment?
La ligne qui produit le message du mail.

$fields = array('name' => 'Nom', 'surname' => 'Prénom', 'phone' => 'Téléphone', 'email' => 'Email', 'message' => 'Message');

Merci pour ton aide Smiley smile
Modifié par Tintin75 (05 Jul 2016 - 11:34)
kustolovic a écrit :
Bonjour, comment est généré le corps du message (pas indiqué dans le code). à partir de $fields je présume mais comment?


Voir ci-dessus Smiley lol

parceque envoyer un array c'est bien, mais après tu fais quoi avec ????
Bonjour,

C'est bien joli Tintin tes déclarations de variable mais l'assemblée souhaite savoir comment tu génères le contenu de ton message ?

De toute façon, pour ta version texte, tes sauts de ligne sont assurés par '\r\n'.

Pour le html, il faut les remplacer par de simples '<br>' (break-row).

Après selon la façon dont est construit ton corps de message, diverses solutions peuvent être envisagées (regexp, construction dans une boucle etc).

Bien à toi. Smiley smile
Modifié par Greg_Lumiere (05 Jul 2016 - 13:53)
Code complet

// Configuration du formualaire

$from="X\n"; // Nom de l'expéditeur du message
$from.="MIME-version: 1.0\n"; // Code pour passer le message en html
$from.="Content-type: text/html; charset=UTF-8\n"; // Pour passer le message en html
$sendTo = "X";
$subject = 'X';
$fields = array('name' => 'Nom', 'surname' => 'Prénom', 'phone' => 'Téléphone', 'email' => 'Email', 'message' => 'Message'); 
$okMessage = 'Merci, pour votre message, pour retourner sur le site <a href="X">X</a>';
$errorMessage = 'Il y a une erreur lors de l\'envoi de votre message';

try
{
    $emailText = "Vous avez un message " . "<br><br>";

    foreach ($_POST as $key => $value) {

        if (isset($fields[$key])) {
            $emailText .= "$fields[$key]: $value\n";
        }
    }

    mail($sendTo, $subject, $emailText, "From: " . $from);

    $responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);
    
    header('Content-Type: application/json');
    
    echo $encoded;
}
else {
    echo $responseArray['message'];
}

Modifié par Tintin75 (05 Jul 2016 - 13:54)
Ha Smiley lol Tu vois quand tu veux ?!

D'après ce que tu as mis, tu construis le corps de ton message par $emailText .= "$fields[$key]: $value\n"; soit au format "texte".

En reprenant cette variable, en appliquant un remplacement de caractère (\n => <br>), puis en ce servant de cette nouvelle variable (appelons-là $emailHtml par exemple) dans ton message, tes sauts de lignes devrait être répercutés en html aussi. (à ce moment là il faut envoyer un mail en multi-partie: html + txt ; chose que je ne vois pas sur ton bout de code).

Ce qui me fait m'apercevoir que tu envois ton mail que en version texte.

Tu vois un peu de quoi je parle ?
Je veux le mail en version html avec les accents !!!

avec une présentation

Nom
Prénom
Téléphone
Mail
Message

J'ai compris chef Smiley lol
Modifié par Tintin75 (05 Jul 2016 - 14:10)
$emailText .= "$fields[$key]: $value\n";

En html ? ça donne quoi ?

$emailhtml .= "$fields[$key]: $value\n"; ? Là ça plante Smiley bawling

Je suis parti pour être le boulet du jour Smiley parking
Modifié par Tintin75 (05 Jul 2016 - 14:05)
En fait il te faut revoir ces points si tu souhaite envoyer en version texte et html.

D'une part tes headers qui se doivent d'être complets.

D'autre part, dans ta boucle, de la même façon que tu créés ta version texte, tu vas créer ta version html: $emailHtml .= $fields[$key] . ': ' . $value . '<br>';

Tiens, le lien qui m'a mit le pied à l'étrier: Openclassroom - Envoyer un e-mail en PHP


Edit: Si tu n'as actuellement qu'une seule ligne comme corps de message c'est parce que c'est ton webmail qui "convertit" la version texte en Html lui permettant de rendre cliquables les liens, intégrer les rdv dans l'agenda etc). Bête comme ses pieds il ne fait pas le changement pour les sauts de ligne.
A ce sujet, il me semble que certains Webmails convertissent une ligne finissant par un saut-de-ligne en paragraphe html.
Modifié par Greg_Lumiere (05 Jul 2016 - 14:19)
Pour l'instant ça fonctionne pas, mais ça va le faire Smiley murf

En gros, il faut remplace Text par Html Smiley smile
Modifié par Tintin75 (05 Jul 2016 - 14:26)
Tintin75 a écrit :
En gros, il faut remplace Text par Html Smiley smile
Pas vraiment Smiley decu

Il s'agit de tes deux corps de message: l'un pour la version texte et l'autre...

Regarde bien dans le lien que je t'ai mis ; il colle parfaitement à ton cas.
Tintin75 a écrit :
Merci Greg Smiley clapclap
De rien, mais du coup tu reçois bien tes deux corps-de-message ?

Théoriquement, si t'as bien suivis le tuto, ça ne devrait pas te poser de problème.

Prochaine étape: passer de mail() à PHPMailer Smiley smile
Tintin75 a écrit :
C'est pour un petit site, je me fatigue pas trop.
N'aurais-tu pas du sang Corse qui coule en toi ?! Smiley lol