Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoi de mail

Sujet résolu
30 janvier 2018 à 23:59:34

Bonsoir à tous,

Voila deux heures que je m'arrache les cheveux pour envoyer un mail en php et rien ne fonctionne. je pense que c'est un probleme de configuration mais je m'y connait pas suffisamment pour résoudre le soucis, donc je m'en remet à vous

Si jamais ma betise vous saute aux yeux :honte:.

Le code que j'utilise pour tester :

<?php
 
    ini_set( 'display_errors', 1 );
 
    error_reporting( E_ALL );
 
    $from = "guilloton.landry@laposte.net";
 
    $to = "guilloton.landry@laposte.net";
 
    $subject = "Vérification PHP mail";
 
    $message = "PHP mail marche";
 
    $headers = "From:" . $from;
 
    mail($to,$subject,$message, $headers);
 
    echo "L'email a été envoyé.";
?>

Le message d'erreur :

La configuration de php.ini :

Logiquement, comme lorsqu'on utilise outlook, j'imagine qu'il faut préciser l'identifiant et mot de passe pour que php puisse utiliser le compte laposte, non?

  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 3:20:30

Avant tout : je te conseille de ne pas utiliser la fonction mail(); Dans 95% des cas ton script sera mal configuré, il lui manquera des informations "capitales" dans le header et donc finira très probablement, et même surement, dans les SPAMS (Gmail les affiche même pas parfois).

Va plutôt voir du côté de PHPMailer https://github.com/PHPMailer/PHPMailer qui fait des miracles :)

  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 11:33:21

Bonjour,

J'ai suivi le conseil et ai installé PHPMailer. Du coup, je n'y arrive toujours pas :lol:...

J'ai essayé comme ceci :

<?
        require "C:\\wamp\\www\\PHPMailer-FE_v4.11\\_lib\\class.phpmailer-fe.php";
		$mail = new PHPMailer();
		$mail->Host = 'smtp.laposte.net';
		$mail->SMTPAuth   = true;
		$mail->Port = 25; // Par défaut
		 
		// Authentification
		$mail->Username = "guilloton.landry";
		$mail->Password = "MON_MOT_DE_PASSE";
		 
		// Expéditeur
		$mail->SetFrom('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Destinataire
		$mail->AddAddress('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Objet
		$mail->Subject = 'Test envoi mail';
		 
		// Votre message
		$mail->MsgHTML('Contenu du message en HTML');
		 
		// Envoi du mail avec gestion des erreurs
		if(!$mail->Send()) {
		  echo 'Erreur : ' . $mail->ErrorInfo;
		} else 
		{
		  echo 'Message envoyé !';
		}
?>

Le résultat : la page m'affiche ça :



  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 13:59:24

Salut,

je vois que tu travailles pour l'instant en local. Sache que l'erreur avec la fonction mail() de PHP est normale.

Si tu utilises WAMP par exemple, tu n'arrivera pas à tes fin avec cette fonction, ou alors difficilement.

Mais ce n'est pas peine perdue car tu as d'autres alternatives pour faire tes tests.

Je t'invite à tester MailDev (http://danfarrelly.nyc/MailDev/) Il est facile à installer, et te propose une interface graphique pour intercepter tes emails. Grâce à cet outil, plus de problème de SMTP.

En espérant d'avoir mené sur la bonne voie.

Peace.

  • Partager sur Facebook
  • Partager sur Twitter

Keep it real !

31 janvier 2018 à 14:14:52

Merci pour ta réponse:),

Mais pourtant je n'utilise pas la fonction mail() sur mon dernier message, j'ai utilisé PHPMailer.

Peux tu m'en dire un peux plus sur le pourquoi ça ne fonctionne pas?

  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 15:39:01

Tu es sur la bonne voie !

Ton code avec PHPMailer est bon, cependant ce que t'affiches le navigateur montre que le code PHP que tu as écris n'est pas exécuté (on voit même les commentaires). Regarde si tu n'as pas oublié dans le début du fichier la balise <?php ou quelque chose d'autre qui provoquerai cela...

  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 16:50:23

Bonjour, tu as oublié "php" pour ouvrir la balise php dans ton dernier code
  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 20:53:31

Effectivement, malgré le "php" j'ai toujours l'erreur suivante :

  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 20:57:25

Tu as le message d'erreur sous les yeux ! "Failed opening required". Cela signifie que le fichier dans le require ""; n'est pas trouvé.
  • Partager sur Facebook
  • Partager sur Twitter
31 janvier 2018 à 21:02:48

Merci :D

Bonjour à vous :)

j'ai résolu le problème du require, et maintenant la page affiche : Sorry, nothing to display ... 

ça ne fait pourtant partie des options du script ???

-
Edité par Scueto 1 février 2018 à 13:47:11

  • Partager sur Facebook
  • Partager sur Twitter
1 février 2018 à 22:34:20

J'avance ... mais je n'arrive toujours pas à m'envoyer ce mail de test.:'(

maintenant erreur avec le 'SetFrom' :

le code actuel :

<?php
        require "PHPMailer-FE_v4.11/_lib/class.phpmailer.php";
        $mail = new PHPMailer();
        $mail->Host = 'smtp.laposte.net';
        $mail->SMTPAuth   = true;
        $mail->Port = 25; // Par défaut
          
        // Authentification
        $mail->Username = "guilloton.landry";
        $mail->Password = "********";
          
        // Expéditeur
        $mail->SetFrom('guilloton.landry@laposte.net', 'GUILLOTON Landry');
        // Destinataire
        $mail->AddAddress('guilloton.landry@laposte.net', 'GUILLOTON Landry');
        // Objet
        $mail->Subject = 'Test envoi mail';
          
        // Votre message
        $mail->MsgHTML('Contenu du message en HTML');
          
        // Envoi du mail avec gestion des erreurs
        if(!$mail->Send()) {
          echo 'Erreur : ' . $mail->ErrorInfo;
        } else
        {
          echo 'Message envoyé !';
        }
?>



  • Partager sur Facebook
  • Partager sur Twitter
1 février 2018 à 22:40:03

L'erreur est claire pourtant : Pas de méthode SetFrom.

En regardant la doc, tu aurais-vu que le s est en minuscules... et de même pour addAddress

  • Partager sur Facebook
  • Partager sur Twitter
1 février 2018 à 22:40:29

D'après la doc officielle https://github.com/PHPMailer/PHPMailer, c'est ->setFrom(); et non pas ->SetFrom(); avec une majuscule !

Fais un copier-coller, ça t'évitera bien des erreurs ;)

  • Partager sur Facebook
  • Partager sur Twitter
2 février 2018 à 23:20:51

Bonsoir,

C'est pourtant un copier-coller d'un code qui était censé fonctionner.

C'est vrai que je n'ai pas encore le bon réflexe "doc officielle"... je commence:honte:

Bon malgré la rectification, j'ai toujours le même message d'erreur. (avec un s minuscule bien sûr:))

  • Partager sur Facebook
  • Partager sur Twitter
2 février 2018 à 23:22:58

Re-post ton nouveau code pour voire les modifications que tu as faites.

Le message d'erreur est exactement le même avec la même erreur à la même ligne ? 

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2018 à 0:24:36

<?php
        require "PHPMailer-FE_v4.11/_lib/class.phpmailer.php";
		$mail = new PHPMailer();
		$mail->Host = 'smtp.laposte.net';
		$mail->SMTPAuth   = true;
		$mail->Port = 25; // Par défaut
		 
		// Authentification
		$mail->Username = "guilloton.landry";
		$mail->Password = "**********";
		 
		// Expéditeur
		$mail->setFrom('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Destinataire
		$mail->addAddress('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Objet
		$mail->Subject = 'Test envoi mail';
		 
		// Votre message
		$mail->MsgHTML('Contenu du message en HTML');
		 
		// Envoi du mail avec gestion des erreurs
		if(!$mail->Send()) {
		  echo 'Erreur : ' . $mail->ErrorInfo;
		} else 
		{
		  echo 'Message envoyé !';
		}
?>

Est ce que le fait d'être en local est un problème? (comme avait pu le soulever Takumaterasu un peu plus haut pour la fonction mail()).
J'ai pu trouver d'autres scripts qui font appel à une class.smtp.php en plus mais j'ai toujours la même erreur.
En tous cas, un grand merci pour l'interêt porté à mon soucis:). Thanks
  • Partager sur Facebook
  • Partager sur Twitter
3 février 2018 à 0:34:49

Et simple question, dans ton fichier class.phpmailer.php, la fonction setFrom() existe ?
  • Partager sur Facebook
  • Partager sur Twitter
3 février 2018 à 0:57:28

il y une variable $From... je vais ecumer les fonction

-
Edité par Scueto 3 février 2018 à 0:58:36

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2018 à 1:03:36

Ce qui est étonnant c'est le nom de ton dossier "PHPMailer....v4.11". PHPMailer est actuellement en v6.0.3 : https://packagist.org/packages/phpmailer/phpmailer

Tu dois donc avoir une version ancienne qui ne correspondant pas à la documentation actuelle. 

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2018 à 1:22:22

Je dois être une chèvre (avec tout le respect que j'ai pour les chèvres) mais j'ai suivi ton lien et je ne vois pas où télécharger:honte:.

Je pense d’ailleurs que c'est pour cela que j'ai une ancienne version, j'ai du la trouver autre part.

J'essaierai demain de creer un compte, ile en faut peut être un pour pouvoir acceder au telechargement.

Je dois avouer que je ne comprend pas tout à l'histoire de 'composer'... je vais creuser un peu :)

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2018 à 20:58:27

Bonsoir,

Du coup, je n'ai toujours pas réussi à télécharger la dernière version de PHPMailer, pourriez vous m'indiquer

où exactement sous ce lien https://packagist.org/packages/phpmailer/phpmailer ,peut on lancer le téléchargement?

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2018 à 21:00:29

Bonsoir,

Tu as à droite dans ton lien, un autre lien get GitHub et la tu trouveras "download"

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2018 à 21:10:49

Merci ;)

Je vais pouvoir me relancer dans ma galère d'envoi de mail :lol:.

Edit:

Bon grâce à vous deux, j'ai enfin réussi à installer PHPMailer via composer. J'ai testé composer avec une autre bibliothèque et ça fonctionne... mais forcément : pas avec PHPMailer >_<.

J'ai l'erreur suivante :

(Je sais Aurélien : c'est pourtant clair !!! :lol::lol::lol:)

La classe PHPMailer\PHPMailer n'est pas trouvée. Mais pourquoi???

Je vous joins les screens de mes dossiers, peut être y trouverez vous ma faute.

Mon fichier composer.json (stocké dans mon dossier MAO avec le fichier test2.php) :

{
    "name": "mao/mao",
    "require": {
        "PHPMailer/PHPMailer": "^6.0"
    },
    "authors": [
        {
            "name": "Landry Guilloton",
            "email": "guilloton.landry@laposte.net"
        }
    ]
}

Mon fichier test2.php :

<?php
        require 'vendor/autoload.php';

        use PHPMailer\PHPMailer;
		
		$mail = new PHPMailer();
		$mail->Host = 'smtp.laposte.net';
		$mail->SMTPAuth   = true;
		$mail->Port = 25; // Par défaut
		 
		// Authentification
		$mail->Username = "guilloton.landry";
		$mail->Password = "*******";
		 
		// Expéditeur
		$mail->setFrom('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Destinataire
		$mail->addAddress('guilloton.landry@laposte.net', 'GUILLOTON Landry');
		// Objet
		$mail->Subject = 'Test envoi mail';
		 
		// Votre message
		$mail->MsgHTML('Contenu du message en HTML');
		 
		// Envoi du mail avec gestion des erreurs
		if(!$mail->Send()) {
		  echo 'Erreur : ' . $mail->ErrorInfo;
		} else 
		{
		  echo 'Message envoyé !';
		}
?>



Merci d'avance ;)

-
Edité par Scueto 5 février 2018 à 17:35:42

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2018 à 21:14:39

On va y arriver :lol:

Déjà félicitations de t'être penché sur Composer ! D'après tes screens, tu sembles avoir utilisé correctement Composer. Mais, quelque chose est étrange. N'aurais-tu pas essayé de supprimer un sous dossier nommé PHPMailer ? Normalement tu devrais avoir "vendor/PHPMailer/PHPMailer/src" (je viens d'essayer sur mon ordi). Ce qui me laisse croire que tu as fais ça volontairement est que dans la documentation la ligne pour importer la librairie est 

use PHPMailer\PHPMailer\PHPMailer;

Alors que la tienne est seulement :

use PHPMailer\PHPMailer;

Il faut laisser Composer gérer tout tout seul et ne pas modifier l'arborescence dans le dossier /vendor. La raison est que la liste des imports correspondants aux différents php sont listés dans le fichier autoload_classmap.php (extrait) :

    'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php',
    'PHPMailer\\PHPMailer\\OAuth' => $vendorDir . '/phpmailer/phpmailer/src/OAuth.php',
    'PHPMailer\\PHPMailer\\PHPMailer' => $vendorDir . '/phpmailer/phpmailer/src/PHPMailer.php',
    'PHPMailer\\PHPMailer\\POP3' => $vendorDir . '/phpmailer/phpmailer/src/POP3.php',
    'PHPMailer\\PHPMailer\\SMTP' => $vendorDir . '/phpmailer/phpmailer/src/SMTP.php',



-
Edité par <?php?> 5 février 2018 à 21:15:16

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2018 à 23:05:56

J'ai tout réinstaller par soucis d'erreurs, et j'avais bien oublié une procédure en changeant le composer.json entre ma librairie de test et la librairie de phpmailer : je n'avais pas fait de 'composer update'.

Du coup j'ai un message d'erreur encore jamais vu!!! youpi !!!:lol: 

Mais j'ai l'impression d'avancer donc c'est cool (même si ça ne fonctionne pas encore). 

Petite question à part (ou pas)

Composer a installé un fichier ntuser (fichier DAT), le dossier 'vendor' et les fichiers 'composer.json' et 'composer.lock' dans le répertoire 'C:\Users\Landry'.

J'ai copier le dossier 'vendor' et les fichiers 'composer.json' et 'composer.lock' dans mon repertoire 'wamp/www/MAO' , est ce que c'est utile?

Ca n'a rien changé au fonctionnement : au lancement de mon fichier test2.php, ça mouline 20 secondes et hop! petit message qui fait plaisir...

EDIT : 

Après xxx recherches, J'ai pu lire qu'il fallait paramétrer le php.ini , certains disent que phpmailer ne l'utilise pas donc que ça ne sert à rien...Je testerai demain au cas où... on sait jamais, sur un malentendu...

Et le problème du 'localhost' revient régulièrement aussi...

Qu'en pensez vous?

-
Edité par Scueto 6 février 2018 à 0:33:15

  • Partager sur Facebook
  • Partager sur Twitter
6 février 2018 à 0:46:51

On se demande quand est-ce que ça va fonctionner :lol: (bravo d'être persévérant !)

On dirait que PHPMailer tente d'envoyer le mail par le biais de la fonction mail(); plutôt que d'utiliser le serveur SMTP. D'après la doc https://github.com/PHPMailer/PHPMailer#a-simple-example (et oui toujours la doc officielle :p )il semble manquer une ligne importante qui est :

$mail->isSMTP();   

Mais encore une fois, je te conseille de faire un copier-coller du code se trouvant dans le lien (celui de la ligne au-dessus). Ça évitera beaucoup d'erreurs ! En effet, il y a une autre erreur par exemple :

$mail->Send(); // la fonction que tu utilises
$mail->send(); //celle de la doc officielle avec une majuscule en moins




  • Partager sur Facebook
  • Partager sur Twitter
6 février 2018 à 13:34:53

Hey, ça change!:lol:

Pour obtenir ce magnifique résultat, j'ai complètement repris le code dans l'exemple github. Et j'ai créé une adresse gmail pour les tests.

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load composer's autoloader
require 'vendor/autoload.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'maotestphp@gmail.com';                 // SMTP username
    $mail->Password = 'phptestmao';                           // SMTP password
    $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 25;                                    // TCP port to connect to (587)

    //Recipients
    $mail->setFrom('maotestphp@gmail.com', 'Landry Guilloton');
    $mail->addAddress('guilloton.landry@laposte.net', 'Moi');     // Add a recipient
    $mail->addReplyTo('maotestphp@gmail.com', 'Landry Guilloton');

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
?>



  • Partager sur Facebook
  • Partager sur Twitter
6 février 2018 à 14:57:15

C'est sans fin !!

L'erreur semble assez claire : le serveur (WAMP) n'arrive pas à se connecter au SMTP de Google. Bon bah du coup pas de magie hein, je suis allé sur la page conseillé et j'ai lu les erreurs potentielles https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Voici les erreurs les plus probables :

  • l'extension openssl n'est pas installée ou mal configurée. Pour le savoir fait tourner cette ligne de code : 
    <?php echo (extension_loaded('openssl')?'OK ce n\'est pas le probleme':'c\'est le probleme!')."\n"; ?>
  • Google n'autorise pas la connexion par sécurité pour ton compte. Plusieurs solutions sont conseillées : autoriser ton appareil (ton PC) : https://accounts.google.com/b/0/DisplayUnlockCaptcha (étonnant que ça soit ça mais bon c'est dans le doc de PHPMailer....) ou alors autoriser la connexion au compte pour des applications moins sécurisées (plus probable) : https://support.google.com/accounts/answer/6010255
  • Partager sur Facebook
  • Partager sur Twitter
6 février 2018 à 21:52:30

:):):):):):):):):):):):):):):):):):):):)

Je suis pas certain qu'il y en ait assez pour exprimer ma joie :lol:.
C'est bon !!! ça fonctionne!!! J'ai finalement modifié le port 25 par 465 et banco !!!
Merci merci merci, pour votre aide et pour votre patience :)...
A bientôt pour de nouvelles aventures... ou de nouvelles galères  :lol:
Merci encore ;)
Landry

-
Edité par Scueto 6 février 2018 à 21:54:39

  • Partager sur Facebook
  • Partager sur Twitter