8723 sujets

Développement web côté serveur, CMS

Bonjour à tous,
Plus on en a, plus on en veut ...
Voilà, j'ai un site qui ne marche pas trop mal, mais ... mais j'aimerai envoyer un mail avec le compte-rendu d'une opération.
J'ai trouvé toutes les infos dont j'ai besoin, avec exemple ! Parfait !
Seul un détail me pose un problème. En fait, il ne s'agit ni du site proprement dit, ni de PhP.
Simplement la compréhension de

<?php
   ini_set("SMTP","localhost");
   ini_set("smtp_port","25");
?> 

Précisément, je suis auto-hébergé sur une Raspberry à travers ma box Free Revolution.
Ok pour localhost, je m'en ssuis servi à plusieurs repris, et ça marche.
Mais le port 25 ? Qui va le prendre en compte ? Qui va être le serveur smtp ? Celui de Free ? Nginx ne gère normalement pas le serveur sortant, sauf si installation de PostFix ou autre, si je ne m'abuse ?
Quant à Free, je me souviens que la box ne gère pas le port 25, mais le 587.
Me trompé-je ? Ou n'ai-je pas tout compris ?
merci à vous d'éclairer (une fois de lus !!!) ma lanterne.
Codrialement
Horace
Suite ... sans fin
Finalement, et d'après mes recherches sur le net, j'ai essayé ça :

<?php
   echo "Test smtp";
   ini_set("SMTP","localhost");
   ini_set("smtp_port","587");

   $dest="de.reguin@yahoo.fr";
   $objet="Test d'envoi smtp";
   $message="
      <font face='arial'>
      Bonjourn
	Voici le premier test d'envoir smtp par php
      </font>
   ";
   $entetes="From: regude@yahoo.fr";
   $entetes.="Content-Type: text/html; charset=UTF8";
   
   if(mail($dest,$objet,$message,$entetes))
      echo "Mail envoyé avec succès.";
   else
      echo "Un problème est survenu.";
   exit;
?> 

Il doit me manquer encore une info, car j'ai le message "Un problème est survenu." !
Mais aucune idée du problème !
A l'Aide
H.
Bonjour,
un petit error_get_last pour avoir un peu plus d'info sur l'erreur

 echo "Un problème est survenu. Erreur : " . error_get_last()['message'];

Modifié par CrazyYann (20 Dec 2023 - 10:17)
Merci à tous, mais ça n'arrange pas mes affaires !
Je vous copie ma dernière page :

<?php$

   echo "Test smtp";
   ini_set("display_errors", TRUE); 
   error_reporting(E_ALL) ; 
   ini_set("SMTP","smtp.free.fr");
   ini_set("smtp_port","587");

   $dest="de.reguin@yahoo.fr";
   $objet="Test d'envoi smtp";
   $message="
      <font face='arial'>
      Bonjour
	Voici le premier test d'envoi smtp par php
      </font>
   ";
   $entetes.="From: 'regude@yahoo.fr'";
   $entetes.="Content-Type: text/html; charset=UTF8";
   
   if(mail($dest,$objet,$message,$entetes))
      echo "Mail envoyé avec succès.";
   else
      echo "Un problème est survenu. Erreur : " .  error_get_last()['message']";
   exit;
?> 

Ainsi que les résultats décevants !

Bonjour Voici le premier test d'envoi smtp par php "; $entetes.="From: 'regude@yahoo.fr'"; $entetes.="Content-Type: text/html; charset=UTF8"; if(mail($dest,$objet,$message,$entetes)) echo "Mail envoyé avec succès."; else echo "Un problème est survenu. Erreur : " . error_get_last()['message']"; exit; ?> 

Y voyez-vous quelque chose que je n'aurai pas fait ou mal fait ?
Merci !
Cordialement
H.
Bzhorace a écrit :

Y voyez-vous quelque chose que je n'aurai pas fait ou mal fait ?
H.


Oui Smiley smile

echo "Un problème est survenu. Erreur : " .  error_get_last()['message']";


la dernière double quote n'a rien à faire ici .

Tu utilises un IDE ? parce qu'il doit te surligner l'erreur
Modifié par JENCAL (20 Dec 2023 - 16:20)
Salut Jencal,
Effectivement, la dernière quote était en trop ! Corrigé mais pas plus de résultat !
En fait,je travaille avec gedit sous ubuntu.
Normalement, j'utilise Note ++, mais là, je suis en déplacement.
Amis,
Je tourne en rond et je me désespère !!!
Voici la dernière mouture de ma page php, qui ne fonctionne pas mieux !

<?php$
   echo "Test smtp";
   ini_set("display_errors", TRUE); 
   error_reporting(E_ALL) ; 
   ini_set("SMTP","smtp.free.fr");
   ini_set("smtp_port","587");

   $entetes = array(      
	'From'  => 'regude@yahoo.fr',
	'Content-Type' => 'text/html; charset=UTF8'
	);

   $dest="de.reguin@yahoo.fr";
   $objet="Test d'envoi smtp";
   $message="
      <font face='arial'>
      Bonjour
	Voici le premier test d'envoi smtp par php
      </font>"
	;

   if(mail($dest,$objet,$message,$entetes))
      echo "Mail envoyé avec succès.";
   else
      echo "Un problème est survenu. Erreur : " . error_get_last()['message'];
   exit;
?> 

Du diable si j'y comprends quelque chose au retour !

'regude@yahoo.fr', 'Content-Type' => 'text/html; charset=UTF8' ); $dest="de.reguin@yahoo.fr"; $objet="Test d'envoi smtp"; $message=" Bonjour Voici le premier test d'envoi smtp par php " ; if(mail($dest,$objet,$message,$entetes)) echo "Mail envoyé avec succès."; else echo "Un problème est survenu. Erreur : " . error_get_last()['message']; exit; ?> 

Je ne comprends pas pourquoi j'ai comme message de retour la liste de ma page php à pastir de la fin de Content-Type !!!
Je me suis pourtant fortement inspiré du manuel PHP, même en grande partie copié/collé !
Serais-je damné !
Amitiés
H.
Apparemment, d'après le retour, j'ai un problème avec la construction de $entetes !
Mais où ?? Grand mystère !
Merci
H.
Tu as encore un dollars "$" après ta balise <?php... enlève la et re test

Un vrai IDE (visual studio code est gratuit) tu le montre direct.
Modifié par JENCAL (21 Dec 2023 - 16:50)
Merci Jencal,
Effectivement, une fois le $ viré, ça marche nettement mieux !
J'ai bien l'affichage de 'Test smtpUn problème est survenu. Erreur : '
Mais pas de description de l'erreur !
Je cherche encore ...
Pour le IDE, disons que c'est un peu prématuré, je tourne sous Ubuntu 14.2 LTS, mais j'envisage sérieusement de changer pour du plus moderne !

H.
Salut ,
Le problème vient de

   $entetes = array(      
	'From' => 'regude@yahoo.fr'
	);

Ou alors dans cette instruction :

   if(mail($dest,$objet,$message,$entetes))
      echo "Mail envoyé avec succès.";
   else
      echo "Un problème est survenu. Erreur : " . error_get_last();

Plus loin, ça me dépasse !
J'ai essayé avec ça :

	$success = mail($dest,$objet,$message,$entetes);
	if (!$success) {
    $errorMessage = error_get_last();
	var_dump($errorMessage);
};

Le retour de var_dump est 'NULL'
Donc l'array $errorMessage est vide !
Allez donc comprendre ... moi j'y renonce !
Amitiés
H.
Voici la dernière version de ma page de test :

<!DOCTYPE html>
<html>
<head>
	<meta charset = "utf-8" />
</head>

<body>
<?php
/*php -v 7.3.27 */
   echo "Test smtp ";
   ini_set("SMTP","smtp.free.fr");
   ini_set("smtp_port","587");
   ini_set("display_errors", TRUE); 
   error_reporting(E_ALL) ; 

   $entetes = array(      
	'From' => 'regude@yahoo.fr',
	'Content-Type' => 'text/html; charset=UTF8'
	);
   var_dump($entetes);
	echo ' ';

   	echo ' on y va ';
	echo ' ';

   $dest="de.reguin@yahoo.fr";
	echo $dest;
	echo ' ';

   $objet="Test d'envoi smtp";
	echo $objet;
	echo ' ';

   $message="
      <font face='arial'>
      Bonjour
	Voici le premier test d'envoi smtp par php
      </font>";
	echo $message;
	echo ' ';
 	echo ' le mail !';
	echo ' ';

	$success = mail($dest,$objet,$message,$entetes);
	if (!$success) {
        	echo "Un problème est survenu. Erreur : ";
        	$errorMessage = error_get_last();
		var_dump($errorMessage);}
	else {
		echo 'Le message a bien été envoyé !';
	};
	echo ' On sort ';
?> 
</body>
</html>

J'ai ajouté des display pour essayer de voir ce qui se passe, mais nada de chez nada !
le résultat :

Test smtp array(2) { ["From"]=> string(15) "regude@yahoo.fr" ["Content-Type"]=> string(23) "text/html; charset=UTF8" } on y va de.reguin@yahoo.fr Test d'envoi smtp Bonjour Voici le premier test d'envoi smtp par php le mail ! Un problème est survenu. Erreur : NULL On sort 

Je laisse tomber !
Jpoyeux Noël à tous et Bonne Année
Horace
Modérateur
Bonjour,

1) Normalement, quand on essaie de faire marcher mail(), on n'y arrive pas.

2) Es-tu sûr d'avoir besoin des init_set() ? Y a quoi dans le php.ini ?

3) Je vois des retours à la ligne dans le milieu du message. Commence déjà par faire un message d'une seule ligne. Si tu y mets plusieurs lignes (à faire seulement une fois que le message sur une seule ligne aura fonctionné), il faut séparer les lignes par \r\n.

Les entêtes aussi, il faut les séparer par des \r\n. Et par précaution, je rajoute un \r\n en fin de message et en d'entête.

Par exemple :
		$entetes="From: $from\r\n";
		$entetes.="MIME-Version: 1.0\r\n";
		$entetes.="Content-Type: text/plain; charset=UTF-8\r\n";


4) Je ne mettrais pas de balises html dans le message. Ne le faire qu'après avoir réussi à envoyer un message sans balises html.

5) As-tu essayé ton code sur un serveur autre que ton bricolage actuel ?

Amicalement,
A parsimonhi,
Merci de ta réponse qui me rabiboche un peu avec mail !
Je ne vais pas tester dans les prochains jours ce que tu m'as écrit, mais je garde ça en mémoire, et j'en rêve la nuit !
Comme dit plus haut, je suis en déplacement en Suisse, sur une machine qui n'est pas la mienne et j'ai en plus la difficulté de travailler sous Ubuntu et Gedit, .. que je ne connais pas bien et que je manille encore moins bien !
Dès les premiers jours de la nouvelle année, je m’attelle à nouveau à mes mails et je t'en rendrai compte dès que j'aurai un résultat convenable !
Avec mes voueux pour l'année qui vient
Amitiés
H.
Voilà ... voilà !
Tous mes voeux à tous pour cette nouvelle année !
Mon envoi de mail commence à ressembler à quelque chose ! Enfin !
Yahoo
a écrit :

Sujet :
Test d'envoi smtp
De :
regude@yahoo.fr
Date :
05.01.2024, 18:11
Pour :
de.reguin@yahoo.fr

Bonjour voici le premier test d'envoi smtp par php

Mes petits display dans ma page d'envoi disent bien que le mail a été envoyé ! Super !!
Mais je ne suis pas sorti de mes ennuis ! voilà la suite :
Yahoo
a écrit :

Reporting-MTA: dns; smtp5-g21.free.fr
X-Postfix-Queue-ID: 7D4FD603FB
X-Postfix-Sender: rfc822; regude@yahoo.fr
Arrival-Date: Fri, 5 Jan 2024 18:11:08 +0100 (CET)

Final-Recipient: rfc822; de.reguin@yahoo.fr
Original-Recipient: rfc822;de.reguin@yahoo.fr
Action: failed
Status: 5.7.9
Remote-MTA: dns; mx-eu.mail.am0.yahoodns.net
Diagnostic-Code: smtp; 554 5.7.9 Message not accepted for policy reasons. See
https://postmaster.yahooinc.com/error-codes

Maintenant, c'est à la réception que ça coince !
Je suis allé voir ce qu'était rfc822 et erreur 554 5.7.9, mais mon anglais est trop chancelant !
a écrit :

Erreur de livraison « 554 5.7.9 Message non accepté pour des raisons de politique »

Je ne vois pas trop les raisons politiques !!!
Quant à rfc822, c'est encore pire, avec l'utilisation des paramètres 'MIME' ????
Trop barge !! me faire ça à moi, qui vient de dépasser les 80 ans ! Non mais ...
Amitiés
H.
Modérateur
Bonjour,

Voir https://bobcares.com/blog/554-message-rejected-for-policy-reasons/

Il se peut que le serveur ait considéré que ton mail était du spam.

Essaie déjà d'envoyer ton message à un autre email que le tien, et mets dans ton message autre chose que "Bonjour voici le premier test d'envoi smtp par php".

Il semble aussi qu'il y ait des "redirections" de tes emails. Tu as un smtp free, mais un email yahoo comme émetteur du message. Essaie de mettre ton email free comme expéditeur.

Amicalement,
Merci, au moins un début d'explication !
C'est vrai que j'ai mes adresse de mails chez yahoo (une vielle histoire), et comme je n'a pas d'adresse mail chez free, j'ai essayé de passer par le smtp de yahoo ! Donc de reste rentre soi ! Pas mieux ! Même erreur 544 !
Par contre, j'ai aussi essayé d'envoyer un mail de regude sur yahoo, à de.reguin sur yahoo aussi, et il a passé sans problème, à travers ThunderBird !
Donc reste le problème du span ... Je vérifie demain !
Et je te tiens au courant.
Merci encore
Cordialement
H.
Bonjour à tous,
Je ne sais pas ce qui s'est passé, mais tout d'un coup, ma page php fonctionne comme je le vouais. J'envoie un message par mail, et je le reçois bine de l'autre côté ! Pourquoi ? Ca, c'est un des mystère de l'informatique !
Donc le sujet est clos ! Et je remercie tous ceux qui se sont penchés sur le problème et qui m'ont donné les solutions au fur et à mesure.
Par acquis de conscience, je vous donne le dernier code.

     <?php

    ini_set("SMTP","smtp.free.fr");
    ini_set("smtp_port","587");
    ini_set("display_errors", TRUE); 
    error_reporting(E_ALL) ; 

	$entetes="From: DHR <regude@free.fr>\r\n";
	$entetes.="MIME-Version: 1.0\r\n";
	$entetes.="Content-Type: text/plain; charset=UTF-8\r\n";
	
	$dest="Denis <de.reguin@yahoo.fr>";
    $objet="Aujourd'hui";
	
	$tod = date("y").date("m").date("d");

    $datasetname='sqlite:../../labase/labase.db';

    try{
      $dbh=new PDO($datasetname);
	  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e){
      printf("Échec de la connexion : %s\n", $e->getMessage());
      exit;
    }

	$sql="SELECT * from remember where datecle = '$tod'";
	if(!$dbh->query($sql)) echo "Pb d'accès à la table remember";
	
	else
	{
 	foreach ($dbh->query($sql) as $row):
	$message = $row["jour"].' '.$row["datinv"].' '.$row["raison"];
	$success = mail($dest,$objet,$message,$entetes);
	
	if (!$success) 
		{
         	$errorMessage = error_get_last();
		var_dump($errorMessage);
		$objet = "Erreur Envmail";
       	$errmess =  "Un problème est survenu. Erreur : ".$errorMessage;
		mail($dest,$objet,$errmess,$entetes);
		};
		
	endforeach; 
	};
	?>

Encore merci et BONNE ANNEE !
H.