8722 sujets

Développement web côté serveur, CMS

Bonjour à tous
Je découvre depuis quelques jours le problème suivant :
Lorsqu'une personne s'inscrit sur le liste, elle reçoit un message bienvenue.
Depuis des années ce message est le même et fait environ 1000 caractères.
La fonction mail de PHP renvoie maintenant (moins de 3 mois, il me semble) une erreur quand la taille du message atteint 709 caractères (nombre trouvé par une succession de tests manuels).
Avez vous constaté un problème de ce genre ?
Salut,

cela me semble très court Smiley sweatdrop et pour le coup je pense que je reçois des mails plus long que ça.

Il doit y avoir un paramètre mal configuré sur ton serveur Smiley ohwell (au niveau de php ou du smtp)

Est ce que tu aurais une copie de l'erreur pour voir si on peut y trouver une piste ?
Modérateur
Hello,

Peut être que ça vient de là : Line Length Limits

edit :
- ton mail est en txt ou en html ?
- n'as tu pas un caractère bloquant ?
- on est d'accord que tu n'injectes pas du JS ? (normalement, ça va dans les spams)
- quel est encodage de ton fichier ? utf 8 ? Quel est le type de saut de ligne ?
Modifié par niuxe (24 May 2022 - 17:47)
Merci de ta réponse.
Je vous donne le code php tel qu'il est

function sendConnectInfo($userID) {
/* appel d'une fonction qui va chercher les infos dans la BDD et attribue un mot de passe temporaire */
    $user = new ConnectInfo($userID);
    $to = $user -> mail;
    $firstName = $user -> firstName;
    $userPW = $user -> pw;
    $photoFlag = !is_null($user -> photo);
    $texts = ["Bonjour $firstName",
                    "",
                    "Pour accéder aux pages privées de l'Ensemble vocal :",
                    "   - Utilisez dans le menu l'entrée \"Notre site /Espace privé\"",
                    "   - Sur demande du système, donnez :",
                    "        o votre nom d'utilisateur : $userID",
                    "        o votre mot de passe : $userPW",
                    "",
                    "Rappels :",
                    "   - Le mode d'emploi du site est disponible par l'entrée \"Notre site/Mode d'emploi\"",
                    "   - Une fois connecté à l'Espace privé, vous pouvez modifier",
                    "        o votre mot de passe par l'entrée \"Notre site/Nouveau mot de passe\"",
                    "        o les autres informations vous concernant par l'entrée \"Notre site/Mes informations\"",
					"   - Pour accéder au lieu de répétition vous avez besoin d'une carte de membre",
					"     vous pouvez obtenir votre carte à l'adresse  https://www.alma-musica.net/html/private/carte.php", 
					"   - à imprimer et découper vous-même ou à laisser affichée sur votre smartphone",
					"   - Vous pouvez synchroniser nos activités sur votre smartphone",
					"     voir le mode d'emploi à l'adresse  https://www.alma-musica.net/html/documents/user-guide/calendrier.html"];
 
    if(! $photoFlag) {
        $texts[] = "   - Vous n'avez pas actuellement de photo dans le répertoire du site.";
        $texts[] = "     Prière d'en envoyer une dès que possible à l'adresse webmaster@alma-musica.net";
    }
    $headers = ['From: "Alma Musica"<webmaster@alma-musica.net>',
                     'Content-Type: text/plain; charset="UTF-8"',
                     'Content-Transfer-Encoding: quoted-printable',
                     'Bcc: webmaster@alma-musica.net'];
	$subject = "Vos paramètres de connexion";
    $text =  implode("\n", $texts);
	$header = implode("\n", $headers);
	$mailsent = mail($to, $subject, $text, $header);
	return $mailsent;
}


Pendant des années ce code fonctionnait sans problème.

Récemment j'ai eu systématiquement $mailsent = FALSE

En cherchant ce qui clochait, j'ai trouvé par essais et erreurs que ça venait de la longueur du texte.

Je n'ai pas la possibilité de changer quoi que ce soit dans la configuration fournie par l'hébergeur. Je pourrais peut-être demander à passer de PHP Version 7.1.12 à quelque chose de plus récent, mais chaque fois que je me suis livré à une migration de ce type, ça a été une galère de plusieurs semaines pour corriger les incompatibilités entre versions, essentiellement des paramètres optionnels devenus obligatoires, etc. Donc le site est HS pendant pas mal de temps.
Modifié par PapyJP (25 May 2022 - 10:19)
Modérateur
Bonjour,

Quel est ton hébergeur ?
As t-il une doc ?

Cdt

edit( apparemment c’était online.net mais passer entre les mains de scaleway ... de là, à ce qu'il y est un rapport , ça pourrait )
Modifié par gcyrillus (25 May 2022 - 14:11)
Salut

Quelle est l'erreur exact que te renvoit mail() quand tu es face au problème ?

tu peux par exemple utilisé https://www.php.net/manual/fr/function.error-get-last.php


exemple d'utilisation :

$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
    $errorMessage = error_get_last()['message'];
}

Modifié par JENCAL (25 May 2022 - 11:54)
Modérateur
@Jencal: +1

As tu accès aux log du serveur ?

Sinon, en faisant de cette manière (syntaxe heredoc):


function sendConnectInfo($userID) {
//appel d'une fonction qui va chercher les infos dans la BDD et attribue un mot de passe temporaire
    $user = new ConnectInfo($userID);
    $to = $user->mail;
    $firstName = $user->firstName;
    $userPW = $user->pw;
    $photoFlag = !is_null($user->photo);

    $texts = <<<CONTENT
Bonjour $firstName,

Pour accéder aux pages privées de l'Ensemble vocal : 
- Utilisez dans le menu l'entrée "Notre site /Espace privé" 
- Sur demande du système, donnez : 
    o votre nom d'utilisateur : $userID 
    o votre mot de passe : $userPW

Rappels : 
    - Le mode d'emploi du site est disponible par l'entrée "Notre site/Mode d'emploi" 
    - Une fois connecté à l'Espace privé, vous pouvez modifier 
        o votre mot de passe par l'entrée "Notre site/Nouveau mot de passe" 
        o les autres informations vous concernant par l'entrée "Notre site/Mes informations" 
    - Pour accéder au lieu de répétition vous avez besoin d'une carte de membre vous pouvez obtenir votre carte à l'adresse  https://www.alma-musica.net/html/private/carte.php  
    - à imprimer et découper vous-même ou à laisser affichée sur votre smartphone 
    - Vous pouvez synchroniser nos activités sur votre smartphone voir le mode d'emploi à l'adresse  https://www.alma-musica.net/html/documents/user-guide/calendrier.html
 
CONTENT;

if(!$photoFlag){
    $texts .= <<<CONTENT_PLUS 
    - Vous n'avez pas actuellement de photo dans le répertoire du site.
Prière d'en envoyer une dès que possible à l'adresse webmaster@alma-musica.net
CONTENT_PLUS;
}

    $headers = ['From: "Alma Musica"<webmaster@alma-musica.net>',
                     'Content-Type: text/plain; charset="UTF-8"',
                     'Content-Transfer-Encoding: quoted-printable',
                     'Bcc: webmaster@alma-musica.net'];
	$subject = "Vos paramètres de connexion";
	$header = implode("\n", $headers);
	$mailsent = mail($to, $subject, $texts, $header);
	return $mailsent;
}

Modifié par niuxe (25 May 2022 - 14:50)
J'étais justement en train de refaire cette fonction et j'avais en particulier utilisé la syntaxe heredoc, mais ça n'a hélas rien changé au problème.
Je vais raccourcir le texte et y mettre un lien qui affiche tout le baratin de fin.
Il n'empêche que ça ne résout pas le problème.
Inutile de m'adresser au support de l'hébergeur, ils ne s’intéressent (au mieux) qu'au fait que le serveur est en panne...
Modérateur
PapyJP a écrit :
Inutile de m'adresser au support de l'hébergeur, ils ne s’intéressent (au mieux) qu'au fait que le serveur est en panne...


Non, mais si pas de doc et un problème aussi devenu récurrent pour d'autre utilisateurs/clients, c'est peut-être le moment de déménager Smiley cligne

Si ton hébergeur est devenu scaleway : leur doc dit https://www.scaleway.com/en/docs/webhosting/classic/how-to/configure-php/#how-to-send-emails et pour les soucis il ya https://www.scaleway.com/en/docs/webhosting/classic/how-to/configure-php/#how-to-solve-email-problems
C'est succinct , certes Smiley smile

Cdt
Modifié par gcyrillus (25 May 2022 - 16:00)
Je viens de faire des essais.

Avec un message de strlen($text) = 672 l'envoi est OK

Avec un message strlen($text)n = 709 ça plante
$errorMessage = error_get_last()['message']; me renvoie Undefined index: PHP_AUTH_USER

Comprenne qui peut!
La doc Scaleway dit que la version courante par défaut est PHP 7.3
Ma version est PHP 7.1.12 et qu'on peut changer soi même de version
Beaucoup de releases intermédiaires.
Vous pouvez afficher mes infos PHP par https://www.alma-musica.net/phpinfo.php
Est-ce qu'à votre avis je peux risquer le coup, sans pour autant être sûr que ça va fonctionner ???
Modifié par PapyJP (25 May 2022 - 17:00)
Modérateur
Bonsoir,

Pour changer de version PHP entre la 7.1.2 et la 7.3 , il y a peu de difference, je dirais à priori peu de risques. Si tu peut revenir sur la version actuelle , tu peut tester. Tes script n'en seront pas modifiés.

Pour le mail trop long, réduire les textes risque d’être compliqué et moins convivial, envoyer deux mails distinct, l'un avec les identifiants et procédures de connexion et un second d'aide/informatif complémentaire est peut-être une option.

Cdt
Modifié par gcyrillus (25 May 2022 - 19:25)
Je viens de me souvenir de la raison pour laquelle je n'avais pas utilisé heredoc mais un tableau:
Selon les logiciels de gestion de messages, \r\n est parfois considéré équivalent à \n\n, c'est à dire deux sauts de ligne.
En mettant des textes sans fin de ligne dans le tableau et en utilisant implode("\n", $tableau) j'évite ce problème.
Auriez vous autre chose à proposer ?
gcyrillus a écrit :

Pour changer de version PHP entre la 7.1.2 et la 7.3 , il y a peu de difference, je dirais à priori peu de risques. Si tu peut revenir sur la version actuelle , tu peut tester. Tes script n'en seront pas modifiés.

Je préfère attendre juillet (peu d'activités sur le site) pour faire cette manip.
gcyrillus a écrit :
Pour le mail trop long, réduire les textes risque d’être compliqué et moins convivial, envoyer deux mails distinct, l'un avec les identifiants et procédures de connexion et un second d'aide/informatif complémentaire est peut-être une option.

Dans ce cas particulier, ce n'est pas un problème. Dans un autre site que je ne gère plus il y avait une Newletter en "HTML pour gmail", et ça aurait été vraiment très ennuyeux.
Modifié par PapyJP (26 May 2022 - 19:42)
PapyJP a écrit :
Je viens de me souvenir de la raison pour laquelle je n'avais pas utilisé heredoc mais un tableau:
Selon les logiciels de gestion de messages, \r\n est parfois considéré équivalent à \n\n, c'est à dire deux sauts de ligne.
En mettant des textes sans fin de ligne dans le tableau et en utilisant implode("\n", $tableau) j'évite ce problème.
Auriez vous autre chose à proposer ?


Finalement pour $header et $text j'ai utilisé l'approche suivante :

function mailString($text) {
    return str_replace("\r\n", "\n", $text);
}
.....
$text = <<<EOT

EOT;
$text = mailString($text)

Cela au cas où ça pourrait venir en aide à quelqu'un Smiley biggrin
Modifié par PapyJP (28 May 2022 - 11:58)