IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Envoie de mail


Sujet :

Laravel PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut Envoie de mail
    Bonjour,

    J'essaye de faire un petit formulaire d'envoie de mail.

    Il fonctionne presque... Je reçois bien un mail, mais sans sujet ni message.
    Et j'ai cette erreur :

    Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
    No message

    Étonnant puisque le message est bien envoyé pourtant.

    De plus, je ne sais pas comment gérer les exceptions (si un champ n'est pas rempli par exemple).

    Voilà ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public function mail(){
     
            $sujet = "";
            $destinataire = "";
            $message = "";
     
            if (isset($_POST['sujet'])) {
                $sujet = htmlspecialchars($_POST['sujet']);
            }
            if (isset($_POST['destinataire'])) {
                $destinataire = htmlspecialchars($_POST['destinataire']);
            }
            if (isset($_POST['message'])) {
                $message = htmlspecialchars($_POST['message']);
            }
     
            $expediteur = 'contact@andre-ani.fr';
            $headers = 'MIME-Version: 1.0' . "\n";
            $headers .= "Content-type: text/plain; charset=utf-8\n";
            $headers .= 'Reply-To: ' . $expediteur . "\n";
            $headers .= 'From: "Patrice Andreani"<' . $expediteur . '>' . "\n";
            $headers .= "Cc : contact@andre-ani.fr\n";
            $headers .= 'Delivered-to: ' . $destinataire . "\n";
            $headers .= "X-Priority : 3\n";
            $headers .= "Content-Transfer-Encoding: 8bit\n";
     
            mail($destinataire, $sujet, $message, $headers);
     
            return back()
              ->with('success','Mail envoyé.');
        }
    Une idée de ce que je fais mal par hasard ?
    Merci d'avance ;-)

    ANDRE Ani

  2. #2
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    MethodNotAllowedHttpException c'est que tu envoies du GET sur du POST peut être.

    Sinon pour le mail, je te conseille d'utiliser les fonctions de Laravel au lieu du simple php.
    Tu peux suivre ce tuto (en anglaish) :
    https://appdividend.com/2018/03/05/s...avel-tutorial/

  3. #3
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    Oui, j'ai hésité à voir un tuto, mais ils font tous juste un envoie de mail direct, sans formulaire pour envoyer un message ni rien, et ça me perturbe.
    Et j'ai du mal à comprendre comment tout ça fonctionne.

    Bon, j'ai une erreur, évidemment :
    View [emails.name] not found.

    Je ne comprends pas vraiment à comment fonctionne et à quoi sert le fichier sendmalaible.php
    Dedans, il y a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function build()
        {
            return $this->view('emails.name');
        }
    Et je ne sais pas quoi en faire...

  4. #4
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Laravel peut utiliser plusieurs techniques pour envoyer des emails, pas seulement mail(). Tu pourra choisir l'une ou l'autre sans modifier tout ton code.

    SendMailable c'est le fichier qui enverra un type d'email. Par exemple tous les mails de bienvenue. A la place de SendMailable tu peux mettre autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php artisan make:mail MailDeBienvenue
    Les emails utilisent maintenant des vues, donc dans le dossier resources/views tu crées un dossier email et dedans tu mets tes vues par ex. : maildebienvenue.blade.php.

    Et tu indiques quelle vue utiliser pour quel mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function build()
        {
            return $this->view('emails.maildebienvenue');
        }
    Edit : Tu peux utiliser un formulaire pour envoyer des mails. Regarde un exemple de fonction de contact :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public function contactConfirm(Request $request)
      {
        $store = request()->store;
        $datafields = $request->all();
     
        Mail::to($store->email)->send(new MailGeneral($store, $datafields));
        Mail::to($request->get('email'))->send(new MailGeneral($store, $datafields));
     
        $return_message = 'Email sent!';
     
        $personalized_return_message = trim($request->get('return_message'));
     
        if ( strlen($personalized_return_message) )
          $return_message = $personalized_return_message;
     
        return back()->with('message', $return_message);
      }
    $datafields = $request->all(); vient du formulaire.

    Et le fichier MailGeneral (l'equivalent de MailDeBienvenue de plus haut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
     
    namespace App\Mail;
     
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Contracts\Queue\ShouldQueue;
     
    class MailGeneral extends Mailable
    {
        use Queueable, SerializesModels;
        protected $inputs;
        protected $store;
     
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct($store, $inputs)
        {
            $this->store = $store;
            $this->inputs = $inputs;
        }
     
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->from($this->store->email)->view('email.general')->with('datafields', $this->inputs);
        }
    }

  5. #5
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    J'essaye de récapituler un peu le tuto déjà.

    Le fichier sendmailable, dans app/mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
    namespace App\Mail;
     
    use Illuminate\Bus\Queueable;
    use Illuminate\Mail\Mailable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Contracts\Queue\ShouldQueue;
     
    class SendMailable extends Mailable
    {
        use Queueable, SerializesModels;
        public $name;
     
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct($name)
        {
            $this->name = $name;
        }
     
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->view('emails.name');
        }
    }

    La fonction dans mon controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public function mail()
    {
       $name = 'Patrice';
       Mail::to('patrice@gmail.com')->send(new SendMailable($name));
     
       return 'Email was sent';
    }
     
    }

    Et ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div>
        Hi, This is : {{ $name }}
    </div>
    J'avais du faire une erreur, j'ai refais le tuto et ça fonctionne (presque, erreur d'authentification Google). Mais y a du mieux.
    Maintenant que je comprends un peu mieux, faut que je vois comment ajouter un formulaire de contact et transmettre les infos au controller, sans que le mail soit envoyer directement quand on arrive sur la page.

  6. #6
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Nice

    Pour ne pas envoyer directement le mail, tu dois faire une route qui pointe vers le formulaire (une simple vue) puis ce dernier pointera en POST vers la route d'envoi du mail.

Discussions similaires

  1. Envoi de mail au format html
    Par Mephyston dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/01/2004, 12h29
  2. Envoi de mail au format Rich-Text
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 29/10/2003, 16h27
  3. envoi de mail avec attachement de fichier
    Par GMI3 dans le forum Modules
    Réponses: 2
    Dernier message: 24/09/2003, 11h22
  4. Outlook ne se ferme pas après un envoi de mail
    Par Joke dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2003, 17h32
  5. envoi de mail, protocol SMTP langage C
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 23/05/2003, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo