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

Après mailto, mail tout court...

32 réponses
Avatar
Pascale
J'ai encore des soucis et pas avec un mailto, mais tout bêtement avec la
fonction mail (PHP). Je pense néanmoins que ma question a plus sa place ici
que sur fr.comp.lang.php.

J'ai une page qui envoie un message au propriétaire du site lorsqu'un
utilisateur entre un témoignage (via un formulaire). Il n'y a évidemment
pas de .... mais des valeurs de session que je récupère.

Le bout de programme concerné est fait ainsi :

$entetes="From: postmaster@monbeaudomaine.fr\n".
"Reply-To: ".$courriel."\n".
"Return-path: postmaster@monbeaudomaine.fr\n".
"MIME-Version: 1.0\n".
"Content-Type:text/plain; charset=iso-8859-15\n".
"Content-Transfer-Encoding: 8bit\n";
$sujet="Nouveau témoignage sur le site de xxxxx";
$libcat=....;
$texte=....;
$prenom=....;
$courriel=....;
$message=$prenom." (adresse courriel ".$courriel." vient de saisir le
témoignage suivant sur le site de xxxxxx :\n".$texte."\nCe témoignage est
inscrit dans la catégorie ".$libcat;
mail($adrms,$sujet,$message,$entetes);

Si j'envoie ce courriel chez moi et que je le lis avec Becky, tout est
normal, il n'y a strictement aucun problème. Mais ce courriel est
normalement reçu par le propriétaire du site qui lit les messages, pour
autant que je sache, avec la messagerie Orange.

Et le problème est que lorsque c'est lui qui récupère les messages (ce qui
est le fonctionnement normal),systématiquement, la première lettre du sujet
(un N, en l'occurrence) disparaît corps et biens, le titre devient « ouveau
témoignage sur le site de xxxxx » !
J'ai à un autre endroit du site un formulaire de contact fait sur le même
modèle : le problème est le même, la première lettre du sujet disparaît,
mais là encore, uniquement lorsque les messages sont lus avec la messagerie
Orange !

Je me dis qu'il manque peut-être quelque chose dans mes en-têtes pour qu'il
n'y ait pas de lézard, mais kouadonc ?

--
Pascale

10 réponses

1 2 3 4
Avatar
Olivier Miakinen
Bonjour,

Le 25/02/2009 19:20, Pascale a écrit :
J'ai encore des soucis et pas avec un mailto, mais tout bêtement avec la
fonction mail (PHP). Je pense néanmoins que ma question a plus sa place ici
que sur fr.comp.lang.php.



Bof... tu aurais pu hésiter entre fr.comp.lang.php et fr.comp.mail, mais
je ne vois pas bien le rapport avec fciw.auteurs. Pas grave, je vais
répondre quand même.

J'ai une page qui envoie un message au propriétaire du site lorsqu'un
utilisateur entre un témoignage (via un formulaire). Il n'y a évidemment
pas de .... mais des valeurs de session que je récupère.

Le bout de programme concerné est fait ainsi :

$entetes="From: ".
"Reply-To: ".$courriel."n".



Je suppose que $courriel est fixé en dur plutôt que de venir de
l'extérieur (formulaire ou session). Dans le cas contraire, ton script
serait une aubaine pour les spammeurs.

"Return-path: ".
"MIME-Version: 1.0n".
"Content-Type:text/plain; charset=iso-8859-15n".


^^
Attention : si j'en crois ma compréhension du RFC 2822, l'espace n'est
effectivement pas obligatoire après le deux-points, mais vu que tout le
monde la met il vaudrait mieux faire pareil. Ce sera plus lisible, et
comportera moins de risques d'être mal interprété à l'arrivée.

Donc :
"Content-Type:text/plain; charset=iso-8859-15n".


"Content-Transfer-Encoding: 8bitn";
$sujet="Nouveau témoignage sur le site de xxxxx";


^
Alors qu'on pouvait éventuellement compter sur le dialogue entre
navigateur et courrielleur pour corriger cela dans le cas d'un lien
mailto, ici c'est toi qui formates le message, et donc les caractères
non ascii sont interdits dans un champ d'entête.

Donc :
$sujet="Nouveau =?ISO-8859-15?Q?témoignage?= sur le site de xxxxx"
ou :
$sujet="=?ISO-8859-15?Q?Nouveau_témoignage_sur_le_site_de_xxxxx?="
etc.

[...]

Si j'envoie ce courriel chez moi et que je le lis avec Becky, tout est
normal, il n'y a strictement aucun problème.



... preuve que ce n'est pas plus un problème de page web que de code PHP.

[...]

Et le problème est que lorsque c'est lui qui récupère les messages (ce qui
est le fonctionnement normal),systématiquement, la première lettre du sujet
(un N, en l'occurrence) disparaît corps et biens, le titre devient « ouveau
témoignage sur le site de xxxxx » !



Très bizarre, comme comportement. Mais essaye déjà de virer l'accent ou
d'encoder le tout au format MIME... si ça ne marche pas, tu peux aussi
tenter de mettre une espace au début du titre ! ;-)

Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Le 26/02/2009 00:44, déjà à moitié endormi, j'écrivais :

"Content-Type:text/plain; charset=iso-8859-15n".


^^
Attention : si j'en crois ma compréhension du RFC 2822, l'espace n'est
effectivement pas obligatoire après le deux-points, mais vu que tout le
monde la met il vaudrait mieux faire pareil. Ce sera plus lisible, et
comportera moins de risques d'être mal interprété à l'arrivée.

Donc :
"Content-Type:text/plain; charset=iso-8859-15n".



Comprendre :
"Content-Type: text/plain; charset=iso-8859-15n".
Avatar
Pascale
Olivier Miakinen <om+ écrivait
news::

Bof... tu aurais pu hésiter entre fr.comp.lang.php et fr.comp.mail,
mais je ne vois pas bien le rapport avec fciw.auteurs. Pas grave, je
vais répondre quand même.



Merci. Mais vu que mon problème précédent, qui concernait l'encodage d'un
mailto s'est retrouvé sur ce forum, j'ai pensé que c'était mieux de
continuer ici. Non ?

Je suppose que $courriel est fixé en dur plutôt que de venir de
l'extérieur (formulaire ou session). Dans le cas contraire, ton script
serait une aubaine pour les spammeurs.



Non, il vient bel et bien de l'extérieur. On vérifie que l'on a affaire à
un humain et non à un robot en demandant le résultat d'une petite addition
de 2 nombres générés aléatoirement. J'ai plusieurs formulaires qui
fonctionnent comme ça sur différents sites, je n'y ai JAMAIS vu un spam. Si
cela se produisait, je pense que je mettrais un captcha, quoique je n'aime
guère ces trucs.

Attention : si j'en crois ma compréhension du RFC 2822, l'espace n'est
effectivement pas obligatoire après le deux-points, mais vu que tout
le monde la met il vaudrait mieux faire pareil. Ce sera plus lisible,
et comportera moins de risques d'être mal interprété à l'arrivée.

Donc :
"Content-Type:text/plain; charset=iso-8859-15n".



D'acc, j'ai vu la correction dans ton message suivant (-:

"Content-Transfer-Encoding: 8bitn";
$sujet="Nouveau témoignage sur le site de xxxxx";


^
Alors qu'on pouvait éventuellement compter sur le dialogue entre
navigateur et courrielleur pour corriger cela dans le cas d'un lien
mailto, ici c'est toi qui formates le message, et donc les caractères
non ascii sont interdits dans un champ d'entête.

Donc :
$sujet="Nouveau =?ISO-8859-15?Q?témoignage?= sur le site de xxxxx"
ou :
$sujet="=?ISO-8859-15?Q?Nouveau_témoignage_sur_le_site_de_xxxxx?="
etc.



D'accord, on retombe donc sur quelque chose qui ressemble fort à ce que
j'ai dû faire pour le mailto, ce qui n'est pas étonnant.

Si j'envoie ce courriel chez moi et que je le lis avec Becky, tout
est normal, il n'y a strictement aucun problème.



... preuve que ce n'est pas plus un problème de page web que de code
PHP.



C'est bien ce que je pense.

Très bizarre, comme comportement. Mais essaye déjà de virer l'accent
ou d'encoder le tout au format MIME... si ça ne marche pas, tu peux
aussi tenter de mettre une espace au début du titre ! ;-)



C'est vrai, j'y avais d'ailleurs pensé (o:

Encore une fois, je te remercie pour ton aide.

--
Pascale
Avatar
Olivier Miakinen
Le 26/02/2009 14:27, Pascale a écrit :

Je suppose que $courriel est fixé en dur plutôt que de venir de
l'extérieur (formulaire ou session). Dans le cas contraire, ton script
serait une aubaine pour les spammeurs.



Non, il vient bel et bien de l'extérieur. On vérifie que l'on a affaire à
un humain et non à un robot en demandant le résultat d'une petite addition
de 2 nombres générés aléatoirement. J'ai plusieurs formulaires qui
fonctionnent comme ça sur différents sites, je n'y ai JAMAIS vu un spam. Si
cela se produisait, je pense que je mettrais un captcha, quoique je n'aime
guère ces trucs.



D'accord. Cela limite pas mal les risques en effet. Mais pour limiter
encore plus je te suggère, si ce n'est pas déjà fait, d'au moins
supprimer tous les r et n de cette variable avant de la mettre dans
le champ d'entête Reply-To :

$courriel = preg_replace("/[rn]/", "", $courriel);

[...]

Très bizarre, comme comportement. Mais essaye déjà de virer l'accent
ou d'encoder le tout au format MIME... [...]





Tu nous tiens au courant ?
Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:49a6b214$:

D'accord. Cela limite pas mal les risques en effet. Mais pour limiter
encore plus je te suggère, si ce n'est pas déjà fait, d'au moins
supprimer tous les r et n de cette variable avant de la mettre dans
le champ d'entête Reply-To :

$courriel = preg_replace("/[rn]/", "", $courriel);



J'ai une regexp qui vérifie que l'adresse courriel ressemble à une adresse
courriel :

if ($courriel=='')
{
echo '<p class="avert">Votre adresse courriel est manquante !</p>';
$err='1';
}
// Teste la validité de l'adresse courriel
elseif (!ereg("^([a-zA-Z0-9]+(([.-_]?[a-zA-Z0-9]+)+)?)@(([a-zA-Z0-
9]+[.-_])+[a-zA-Z]{2,4})$",$courriel))
{
$err='1';
echo '<p class="avert">'.$courriel.' n'est pas une courriel
valide !</p>';
}
...
Ce n'est évidemment pas moi qui l'ai créée, mais à l'usage, elle filtre
bien les adresses malformées et ne semble pas renvoyer de faux positif
(mais bon, qu'est-ce qui est parfait en ce bas monde ? (-: )

[...]

Très bizarre, comme comportement. Mais essaye déjà de virer l'accent
ou d'encoder le tout au format MIME... [...]





Tu nous tiens au courant ?



Volontiers. Pas sûr que je retravaille là dessus aujourd'hui, mais je vais
le faire (« elle PEUT le faire, c'est extraordinaire ! »)

Re-merci !

--
Pascale
Avatar
Olivier Miakinen
Le 26/02/2009 17:11, Pascale a écrit :

$courriel = preg_replace("/[rn]/", "", $courriel);



J'ai une regexp qui vérifie que l'adresse courriel ressemble à une adresse
courriel :

elseif (!ereg("^([a-zA-Z0-9]+(([.-_]?[a-zA-Z0-9]+)+)?)@(([a-zA-Z0-
9]+[.-_])+[a-zA-Z]{2,4})$",$courriel))



En effet, ça suffit pour empêcher le détournement du formulaire à fin de
spam. Mais cette ereg fait partie des expressions rationnelles fascistes
qui refusent mon adresse... et la tienne aussi ! Tout ceci pour une
complexité inutile. Parmi ses autres bugs, il y a l'impossibilité de
mettre un TLD de plus de 4 caractères, ou de mettre deux - d'affilée.

Je te conseille plutôt ceci :

elseif (!preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/',
$courriel))

(cf. <http://faqfclphp.free.fr/#rub5.3&gt;)

Ce n'est évidemment pas moi qui l'ai créée, mais à l'usage, elle filtre
bien les adresses malformées et ne semble pas renvoyer de faux positif



Tu ne l'as donc pas essayée sur chaton.tigre+, ou
om+, ou encore Je peux te
garantir que mon adresse est valide, d'ailleurs tu peux m'y envoyer
un courrier en privé pour voir.

(mais bon, qu'est-ce qui est parfait en ce bas monde ? (-: )



Sans atteindre la perfection, ne pas rejeter des adresses couramment
utilisées serait quand même un + (sic).
Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:49a6c50f$:

En effet, ça suffit pour empêcher le détournement du formulaire à fin
de spam. Mais cette ereg fait partie des expressions rationnelles
fascistes qui refusent mon adresse... et la tienne aussi ! Tout ceci
pour une complexité inutile. Parmi ses autres bugs, il y a
l'impossibilité de mettre un TLD de plus de 4 caractères, ou de mettre
deux - d'affilée.



Quand je disais que la perfection n'est pas de ce bas monde (: Mais bon,
fasciste, t'y vas fort...

Je te conseille plutôt ceci :

elseif (!preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/',
$courriel))

(cf. <http://faqfclphp.free.fr/#rub5.3&gt;)



Grmpf. J'en ai testé et retesté des regexp de vérification des adresses
courriel. Je suis prête à parier que j'ai déjà testée celle-ci et si je
l'ai laissée, c'est qu'elle doit laisser passer certaines anomalies. Enfin
bon, j'ai plus qu'à retester (-:

Tu ne l'as donc pas essayée sur chaton.tigre+, ou
om+, ou encore Je peux te
garantir que mon adresse est valide, d'ailleurs tu peux m'y envoyer
un courrier en privé pour voir.



chaton.tigre+ n'est pas censée être utilisée, ce qui fait
que je ne l'ai pas testée...

Sans atteindre la perfection, ne pas rejeter des adresses couramment
utilisées serait quand même un + (sic).



À titre personnel, j'ai rien contre les adresses courriel qui contiennent
un + ... (-:

--
Pascale
Avatar
Olivier Miakinen
Le 26/02/2009 20:09, Pascale a écrit :

Quand je disais que la perfection n'est pas de ce bas monde (: Mais bon,
fasciste, t'y vas fort...



Je sais, je mérite un point Godwin. Mais le refus des adresses plussées
est suffisamment courant pour que je râle très fort à chaque fois.
Encore hier je me suis vu refuser l'adresse om+
pour réserver un bureau pour ma fille.

Je te conseille plutôt ceci :

elseif (!preg_match('/^[.A-Za-z0-9+_-]+@[.A-Za-z0-9-]+$/',
$courriel))

(cf. <http://faqfclphp.free.fr/#rub5.3&gt" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://faqfclphp.free.fr/#rub5.3&gt;)



Grmpf. J'en ai testé et retesté des regexp de vérification des adresses
courriel. Je suis prête à parier que j'ai déjà testée celle-ci et si je
l'ai laissée, c'est qu'elle doit laisser passer certaines anomalies.



Ah, c'est que tu veux être un peu fasciste quand même. Dans ce cas,
prends la première version de <http://faqfclphp.free.fr/#rub5.3&gt" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://faqfclphp.free.fr/#rub5.3&gt; :

$ltext = '[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+';
$rtext = '[A-Za-z0-9-]+';
$pattern = ":^$ltext(.$ltext)*@$rtext(.$rtext)+$:";
if (preg_match($pattern, $email)) { ... }

Elle contrôlera qu'il n'y a pas deux « . » de suite, ni un « . » au
début ou à la fin de chacune des parties gauche et droite. Mais bien
sûr elle n'interdira ni les adresses plussées, ni celles en .museum,
ni celles contenant deux traits d'union de suite (chose courante si
je me rappelle bien avec les noms de domaine internationalisés, mais
aussi avec la récente loi française de formation des noms après le
mariage).

Cela dit, il ne sert à rien de tester toutes les anomalies : si
quelqu'un veut mettre une adresse invalide dans ton formulaire, il
choisira plus facilement un truc du genre de « »
que du genre de « bzz{+--@&..museum », et ton contrôle n'y verra
que du feu.

Tu ne l'as donc pas essayée sur chaton.tigre+, ou
om+, ou encore Je peux te
garantir que mon adresse est valide, d'ailleurs tu peux m'y envoyer
un courrier en privé pour voir.



chaton.tigre+ n'est pas censée être utilisée, ce qui fait
que je ne l'ai pas testée...



Ah. Ben si tu ne la lis jamais, tu peux rajouter .invalid derrière,
c'est plus propre. Note que les adresses en alussinan.org rejettent
pas mal de courriels légitimes de toute façon (ça m'est arrivé il y a
quelques semaines encore avec l'adresse de Luc Bentz chez alussinan).

Sans atteindre la perfection, ne pas rejeter des adresses couramment
utilisées serait quand même un + (sic).



À titre personnel, j'ai rien contre les adresses courriel qui contiennent
un + ... (-:



Merci !
Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:49a6f28b$:

Ah, c'est que tu veux être un peu fasciste quand même.



Juste pour les adresses courriels. J'ai ma dignité, quand même. C'est que
je sais ce dont les youzeurs sont capables, vu que je suis une youzeuse (:

Dans ce cas,
prends la première version de <http://faqfclphp.free.fr/#rub5.3&gt; :

$ltext = '[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+';
$rtext = '[A-Za-z0-9-]+';
$pattern = ":^$ltext(.$ltext)*@$rtext(.$rtext)+$:";
if (preg_match($pattern, $email)) { ... }

Elle contrôlera qu'il n'y a pas deux « . » de suite, ni un « . » au
début ou à la fin de chacune des parties gauche et droite. Mais bien
sûr elle n'interdira ni les adresses plussées, ni celles en .museum,
ni celles contenant deux traits d'union de suite (chose courante si
je me rappelle bien avec les noms de domaine internationalisés, mais
aussi avec la récente loi française de formation des noms après le
mariage).



Ça devrait donc aller.

Cela dit, il ne sert à rien de tester toutes les anomalies : si
quelqu'un veut mettre une adresse invalide dans ton formulaire, il
choisira plus facilement un truc du genre de « »
que du genre de « bzz{+--@&..museum », et ton contrôle n'y verra
que du feu.



Je ne cherche pas à contrôler la validité réelle des adresses courriel. Si
les gens mettent une adresse fantaisiste, ça les regarde, c'est d'abord eux
qui sont pénalisés : je ne demande pas d'adresses courriel pour faire joli
ni pour les revendre... Par exemple, dans Kekcestruc, lorsque les gens
passent une demande d'identification, ils reçoivent un courrier
électronique pour leur dire si la demande est acceptée ou refusée (dans ce
dernier cas, l'adresse sert à leur dire pourquoi). Si elle est acceptée,
l'adresse courriel est utilisée pour les informer de l'acceptation, leur
donner un lien qui leur permet de modifier leur demande, puis pour leur
écrire quand la plante est considérée comme identifiée et du même coup,
leur fournir un lien qui les envoie vers un formulaire de remerciement, au
cas où ils ont envie de passer un petit mot sympa aux « identificateurs ».

Mon but est avant tout de prévenir les erreurs de frappe, par exemple un
espace au milieu de l'adresse, un accent, l'oubli de l'extension du nom de
domaine, 2 points successifs ou 2 @, 2 adresses au lieu d'une, séparées
par un blanc, un slash, ou bien « ou », etc.

Ah. Ben si tu ne la lis jamais, tu peux rajouter .invalid derrière,
c'est plus propre. Note que les adresses en alussinan.org rejettent
pas mal de courriels légitimes de toute façon (ça m'est arrivé il y a
quelques semaines encore avec l'adresse de Luc Bentz chez alussinan).



Oui mais non. L'adresse avec le +spam n'est pas censée être utilisée car il
y a un reply-to qui lui, ne comporte pas ce morceau (cf mes entêtes).
Si on écrit à l'adresse avec le +spam, on se prend un bounce avec le
message suivant :
« chaton.tigre+: host
laila.alussinan.org[82.237.120.164]
said: 550 5.7.0 Adresse volontairement rendue indisponible. Pour me
contacter par E-mail otez le "+spam" de mon adresse. (in reply to RCPT
TO command) »

Donc elle n'est pas valide, mais elle donne l'information nécessaire pour
m'écrire (-:

--
Pascale
Avatar
Olivier Miakinen
Le 26/02/2009 21:29, Pascale a écrit :

Ah, c'est que tu veux être un peu fasciste quand même.



Juste pour les adresses courriels. J'ai ma dignité, quand même. C'est que
je sais ce dont les youzeurs sont capables, vu que je suis une youzeuse (:



;-)

[...]

Mon but est avant tout de prévenir les erreurs de frappe, par exemple un
espace au milieu de l'adresse, un accent,



Si on nomme R ta regexp actuelle, R1 ma première proposition et R2 la
deuxième, toutes les trois contrôlent les deux points ci-dessus.

l'oubli de l'extension du nom de domaine,



Contrôlé par R et R2.

2 points successifs



Contrôlé par R et R2.

ou 2 @,



Contrôlé par R, R1 et R2.

2 adresses au lieu d'une, séparées par un blanc,



Contrôlé par R, R1 et R2.

un slash,



Contrôlé par R, R1 et R2 dans la partie droite de l'adresse ; refusé à
tort dans la partie gauche par R et R1, accepté avec raison par R2.

Cf. les caractères autorisés dans $ltext :
A-Za-z0-9!#$%&'*+/=?^_`{|}~-
(ici j'ai viré le qui ne servait qu'à protéger l'apostrophe)

ou bien « ou », etc.



Contrôlé par R, R1 et R2.

Ah. Ben si tu ne la lis jamais, tu peux rajouter .invalid derrière,
c'est plus propre. Note que les adresses en alussinan.org rejettent
pas mal de courriels légitimes de toute façon (ça m'est arrivé il y a
quelques semaines encore avec l'adresse de Luc Bentz chez alussinan).



Oui mais non. L'adresse avec le +spam n'est pas censée être utilisée car il
y a un reply-to qui lui, ne comporte pas ce morceau (cf mes entêtes).
Si on écrit à l'adresse avec le +spam, on se prend un bounce avec le
message suivant :
« chaton.tigre+: host
laila.alussinan.org[82.237.120.164]
said: 550 5.7.0 Adresse volontairement rendue indisponible. Pour me
contacter par E-mail otez le "+spam" de mon adresse. (in reply to RCPT
TO command) »

Donc elle n'est pas valide, mais elle donne l'information nécessaire pour
m'écrire (-:



Tout ceci est déjà infiniment mieux que la plupart des adresses antispam
que je vois, alors je ne te chicanerai pas là-dessus.
1 2 3 4