Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Toujours des problèmes avec envoiPHP

10 réponses
Avatar
METIS
Bonjour,

Bon, j'ai passé des heures à essayer toutes sortes de configurations, pas
mal au pif car je suis toujours aussi nul en PHP mais je sais
copier/coller(;o))).

Rien à faire, quand ça marche dans le Webmail Orange, ça va pas dans Outlook
Express et réciproquement.
Si ça va dans Outlook Express, dans le webmail Orange, c'est soit le body
qui déconne, soit l'objet mais j'arrive pas à avoir les accents corrects
partout en même temps.

Je bidouille le fichier PHP avec Notepd++ et j'envoie avec Filezilla, pour
éviter les problèmes de codage.

Le fichier PHP que j'envoie et qui pose le moins de problème est en format
ANSI (manque juste les accentuées dans "objet" avec OExpress) :
--------------------------------------------------
<?php
header('Content-Type: text/html; charset=UTF-8');

extract($_POST,EXTR_OVERWRITE);
if(isset($_POST['captchaResult']))
{
session_start();
$_POST['captchaResult'] = strtolower($_POST['captchaResult']);
$_SESSION['captchaResult'] = strtolower($_SESSION['captchaResult']);
if($_POST['captchaResult'] === $_SESSION['captchaResult'])
{ //captcha OK on envoi le message

$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$email=$_POST['email'];
$telephone=$_POST['telephone'];

$headers = "MIME-Version: 1.0\n";
$headers .= 'Content-type: text/plain; charset=UTF-8'."\n";
$headers .= 'From: <'.$email.'>'."\n";
$headers .= 'Cc: xxxxxx@xxxxxxxx.nc'."\n";
$headers .= 'Bcc: xxxxxxx@orange.fr'."\n";

$subject="Télécharger votre dossier...";
$destinataire="$email";

$body=utf8_encode("Vous avez demandé à recevoir le dossier de...\nNous vous
remercions pour votre demande.\nPour télécharger votre dossier, cliquez ce
lien :\nhttp://www....\n\nVous êtes :\nNom : $nom\nPrénom : $prenom\nEmail :
$email\nTéléphone : $telephone" );
mail($destinataire, $subject, $body, $headers);
include("merci.php");
}
else
{
//captcha faux
include("erreur.php");
}
}
?>
--------------------------------------------------

Merci à ceux qui pourraient m'aider.

(ne me conseillez pas PHPmailer, je ne sais pas m'en servir et j'aimerais
savoir si le code ci-dessus peut marcher..?)

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Orange...

10 réponses

Avatar
Olivier Miakinen
Le 19/06/2009 12:11, METIS a écrit :

[...]

Le fichier PHP que j'envoie et qui pose le moins de problème est en format
ANSI (manque juste les accentuées dans "objet" avec OExpress) :
--------------------------------------------------
[...]

$subject="Télécharger votre dossier...";



$subject="=?iso-8859-1?Q?Télécharger_votre_dossier...?=";
Avatar
Olivier Miakinen
Le 19/06/2009 12:11, METIS a écrit :

$headers = "MIME-Version: 1.0n";
$headers .= 'Content-type: text/plain; charset=UTF-8'."n";



Il manque :
$headers .= "Content-Transfer-Encoding: 8bitn";
Avatar
METIS
Olivier Miakinen wrote:
Le 19/06/2009 12:11, METIS a écrit :

[...]

Le fichier PHP que j'envoie et qui pose le moins de problème est en
format ANSI (manque juste les accentuées dans "objet" avec OExpress) :
--------------------------------------------------
[...]

$subject="Télécharger votre dossier...";



$subject="=?iso-8859-1?Q?Télécharger_votre_dossier...?=";



==>ARGH !!! (;o))))))))))))))

Bon, je subodore que ça régle une question de charset.
J'avais déjà réglé le problème du body en forçant UTF-8 avec utf8_encode()

Donc là, je forcerais le subject en iso-8859-1...?
Mais comment trouver ces équivalents, je ne trouve que les &xxxx;

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Orange...
Avatar
METIS
Olivier Miakinen wrote:
Le 19/06/2009 12:11, METIS a écrit :

$headers = "MIME-Version: 1.0n";
$headers .= 'Content-type: text/plain; charset=UTF-8'."n";



Il manque :
$headers .= "Content-Transfer-Encoding: 8bitn";



==>En plus du reste ?
(càd l'encodage du subject en iso-8859-1)

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Orange...
Avatar
Olivier Miakinen
Le 19/06/2009 13:41, METIS a écrit :

$subject="Télécharger votre dossier...";



$subject="=?iso-8859-1?Q?Télécharger_votre_dossier...?=";



==>ARGH !!! (;o))))))))))))))



Ben quoi ?

Bon, je subodore que ça régle une question de charset.



Ça règle la question du charset *dans les entêtes*, ce qui n'a
strictement rien à voir avec la question du charset *dans le corps*
du message. Ces questions sont complètement indépendantes l'une de
l'autre.

Pour que ce soit bien clair, tu peux avoir :

- un body en UTF-8 et un entête en ASCII
- un body en UTF-8 et un entête en Latin1 (c'est le cas ici)
- un body en UTF-8 et un entête en UTF-8
- un body en Latin1 et un entête en ASCII
- un body en Latin1 et un entête en Latin1
- un body en Latin1 et un entête en UTF-8
- un body en ASCII et un entête en ASCII
- un body en ASCII et un entête en Latin1
- un body en ASCII et un entête en UTF-8
- etc., y compris deux entêtes dans des charsets différents

J'avais déjà réglé le problème du body en forçant UTF-8 avec utf8_encode()



C'est très bien. Ne casse surtout pas ça si ça marche.

Donc là, je forcerais le subject en iso-8859-1...?



Ben oui. Par défaut il est en ASCII si tu ne précises rien, même si tu
as un Content-Type différent d'ASCII pour le corps du message.

Mais comment trouver ces équivalents, je ne trouve que les &xxxx;



Ton courrielleur peut le faire pour toi, et même ton nouvelleur, quoique
ce ne soit toujours pas normalisé pour les news. Prends par exemple le
sujet de ce fil : tu avais écrit /Toujours des problèmes avec envoiPHP/
avant que je ne retire l'accent dans mes réponses. Eh bien va relire ton
premier article, fais un truc du genre de « Affichage / Code source du
message » (l'intitulé peut varier selon ton logiciel), et cherche la
ligne qui commence par « Subject: ». S'il te plaît, fais-le vraiment :
je sais bien que tu n'es pas un programmeur, mais ça au moins tu devrais
pouvoir y arriver.

Quand tu l'auras fait, viens copier-coller le résultat dans ta réponse.
Avatar
Olivier Miakinen
Le 19/06/2009 13:43, METIS a écrit :

$headers = "MIME-Version: 1.0n";
$headers .= 'Content-type: text/plain; charset=UTF-8'."n";



Il manque :
$headers .= "Content-Transfer-Encoding: 8bitn";



==>En plus du reste ?



Oui, en plus du reste. Les trois entêtes obligatoires pour déclarer
un jeu de caractères autre qu'ASCII dans un message, en utilisant
MIME, sont MIME-Version, Content-type et Content-Transfer-Encoding.

Ah, s'il y avait des vérificateurs de conformité des courriels, comme
il en existe pour les pages HTML ! Parce que c'est exactement la même
problématique : tu peux avoir l'impression que ça marche en essayant
avec un ou deux logiciels, alors que ta syntaxe peut être complètement
incorrecte.

(càd l'encodage du subject en iso-8859-1)



Ça n'a *RIEN* à voir. Les trois entêtes MIME ci-dessus concernent
l'encodage du corps, l'encodage du Subject est autre chose. Mais
l'un comme l'autre peuvent être incorrects, et d'ailleurs dans ton
cas ils étaient incorrects tous les deux.
Avatar
METIS
Olivier Miakinen wrote:
Le 19/06/2009 13:41, METIS a écrit :
Mais comment trouver ces équivalents, je ne trouve que les &xxxx;



Ton courrielleur peut le faire pour toi, et même ton nouvelleur, quoique
ce ne soit toujours pas normalisé pour les news. Prends par exemple le
sujet de ce fil : tu avais écrit /Toujours des problèmes avec envoiPHP/
avant que je ne retire l'accent dans mes réponses. Eh bien va relire ton
premier article, fais un truc du genre de « Affichage / Code source du
message » (l'intitulé peut varier selon ton logiciel), et cherche la
ligne qui commence par « Subject: ». S'il te plaît, fais-le vraiment :
je sais bien que tu n'es pas un programmeur, mais ça au moins tu devrais
pouvoir y arriver.

Quand tu l'auras fait, viens copier-coller le résultat dans ta réponse.



==>Hé oui :
Subject: =?iso-8859-1?Q?Toujours_des_problèmes_avec_envoiPHP?
Bon, sur le forum de mon hébergeur, un pote m'a répondu en envoyant un code
PHP que je viens de tester avec des accents partout, ça marche, avec OE et
le Webmail Orange!!!

Le problème que j'avais avec mon script pompé sur le Net, c'est qu'il y
avait toujours un cas où ça ne marchait pas.
Quand ça marche dan OE, ça marche pas dans complètement dans webmail Orange.
Et réciproquement.
Quand ça semble marcher dans les 2, il y a toujours un truc qui déconne.
Par exemple :
Vous êtes :
Nom : TEST stratège
Prénom : TEST stratège
Email :
Téléphone : TEST stratège

Côté description, pas bon,
Côté champs du formulaire, bon...
ETC...


--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Orange...
Avatar
Olivier Miakinen
Le 19/06/2009 15:03, METIS a écrit :

Téléphone : TEST stratège



Ben oui. La raison en est très simple, et on a été plusieurs à tenter de
te l'expliquer plusieurs fois. Mais visiblement il y a quelque chose qui
te bloque et t'empêche de la comprendre, alors pour ma part j'ai fini
par abandonner.
Avatar
METIS
Olivier Miakinen wrote:
Le 19/06/2009 15:03, METIS a écrit :

Téléphone : TEST stratège



Ben oui. La raison en est très simple, et on a été plusieurs à tenter de
te l'expliquer plusieurs fois. Mais visiblement il y a quelque chose qui
te bloque et t'empêche de la comprendre, alors pour ma part j'ai fini
par abandonner.



==>Oui, j'ai fini par comprendre.
Encoder le fichier au départ en utilisant Notepad++.
Bon, mais j'avais encore d'autres problèmes...
ANSI, UTF-8, UTF-8 (sans BOM) donnaient toujours des résultats différents,
partiellement satisfaisants.

PS : ton adresse est valide ?

--
<|[;o)) METIS
http://www.graphM.com
Pour m'écrire en privé,
moi c'est metis15 et
je tourne à l'Orange...
Avatar
Olivier Miakinen
Le 19/06/2009 15:25, METIS a écrit :

Téléphone : TEST stratège



Ben oui. La raison en est très simple, et on a été plusieurs à tenter de
te l'expliquer plusieurs fois. Mais visiblement il y a quelque chose qui
te bloque et t'empêche de la comprendre, alors pour ma part j'ai fini
par abandonner.



==>Oui, j'ai fini par comprendre.
Encoder le fichier au départ en utilisant Notepad++.



Ok. Ça te permet de maîtriser le charset de l'une de tes sources de
caractères : ceux qui sont codés en dur dans le fichier PHP.

D'autres sources sont :
- ce qui vient du formulaire ($_POST[] ou $_REQUEST[])
- ce qui vient de la base de données

Et tu as plusieurs déclarations à gérer :
- entêtes HTTP, header("Content-Type...")
- éventuellement pseudo-entête META http-equiv
- déclaration MIME dans le courriel

Bon, mais j'avais encore d'autres problèmes...
ANSI, UTF-8, UTF-8 (sans BOM) donnaient toujours des résultats différents,
partiellement satisfaisants.



Rien ne pourra être complètement satisfaisant tant que tu ne comprendras
pas, à chaque étape et pour chaque caractère, quels sont les octets
envoyés, et comment c'est censé être interprété.

PS : ton adresse est valide ?



Oui, mais j'ai encore moins de temps à perdre par courriel privé que sur
usenet. En public, au moins, j'ai l'espoir que le temps que je passe
pourra servir à d'autres personnes que toi.