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

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    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
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    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 habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    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...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    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 habitué Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Cher (Centre)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    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.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    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.

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Ok dac.
    Bon, j'ai ma route pour le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Route::get('/mail', 'Controller@mail')->name('mail');

    Mon formulaire, page mail, qui envoie les données vers la page d'envoie (en suivant le tuto /send/email) :
    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
     
    <form action="/send/email" method="post">    
            <div class="form-group">
            <label for="sujet">Sujet</label>   
                <input id="sujet" type="text" class="form-control" name="sujet" placeholder="Sujet du mail" maxlenght="80" pattern="[[a-zA-Z ]{5,}" title="Sujet de votre mail, uniquement des lettres" required/>
            </div>
            <div class="form-group">
                <label for="destinataire">Destinataire</label>
                <input id="destinataire" type="email" class="form-control" name="destinataire" placeholder="Mail du destinataire" maxlenght="80" title="Mail du destinataire" required />
            </div>
            <div class="form-group">
                <label for="message">Votre message</label>
                <textarea id="message" name="message" class="form-control" placeholder="Votre message" rows="10" cols="40" maxlenght="150" title="Tappez votre message" required></textarea>
            </div>
                <div class="form-check">
                <button type="submit" class="btn btn-primary">Envoyer</button>
                </div>
            </form>

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

    Bon, je pense que ça avance un peu là, même si je pense que je cafouille entre le formulaire et les données dans le controller.
    Et soucis pour le smtp. Je pensais que mettre gmail fonctionnerait mais non, faut que je trouve autre chose.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Tu commences à bien avancer.

    Pour les liens essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="{{ url('send/email') }}" method="post">

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Ok dac.

    Je cherche un smtp gratuit pour pouvoir tester...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Soucis avec les données du formulaire qui ne sont pas transmises à la fonction d'envoie de mail.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Vérifie bien si tu envois les données lors de la fonction build()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function build()
        {
            return $this->from($this->store->email)->view('email.general')->with('datafields', $this->inputs);
        }

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Je ne dois sûrement pas passer les données du formulaire...
    Et j'ai une erreur :

    Undefined property: App\Mail\SendMailable::$store

    Ce qui concerne $name, venant du tuto, je n'en ai pas besoin ? Comment le supprimer, dans sendmailable notamment.


    Mon fichier /mail/sendmailable :

    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
     
        public function __construct($name)
        {
            $this->name = $name;
        }
     
        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->from($this->store->email)->view('email.name')->with('datafields', $this->inputs);
        }

    Ma route dans web.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Route::get('/mail', ['as' => 'mail', function()
    {
      return view('mail');
    }]);

    Ma fonction mail dans le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function mail(Request $request)
    {
        $store = request()->store;
        $datafields = $request->all();
     
       $name = 'Patrice';
       Mail::to('andreani.patrice@gmail.com')->send(new SendMailable($name));
     
       return 'Email envoyé';
    }

    Mon formulaire d'envoie :
    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
     
    <form action="{{ url('send/email') }}" method="post">    
            <div class="form-group">
            <label for="sujet">Sujet</label>   
                <input id="sujet" type="text" class="form-control" name="sujet" placeholder="Sujet du mail" maxlenght="80" pattern="[[a-zA-Z ]{5,}" title="Sujet de votre mail, uniquement des lettres" required/>
            </div>
            <div class="form-group">
                <label for="destinataire">Destinataire</label>
                <input id="destinataire" type="email" class="form-control" name="destinataire" placeholder="Mail du destinataire" maxlenght="80" title="Mail du destinataire" required />
            </div>
            <div class="form-group">
                <label for="message">Votre message</label>
                <textarea id="message" name="message" class="form-control" placeholder="Votre message" rows="10" cols="40" maxlenght="150" title="Tappez votre message" required></textarea>
            </div>
                <div class="form-check">
                <button type="submit" class="btn btn-primary">Envoyer</button>
                </div>
            </form>
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Citation Envoyé par lostsoul Voir le message
    Undefined property: App\Mail\SendMailable::$store
    C'était un exemple le code avec store; l'adresse email de celui qui envoi est stockée dans $this->store->email à remplacer par une adresse email.

    Citation Envoyé par lostsoul Voir le message
    Ce qui concerne $name, venant du tuto, je n'en ai pas besoin ? Comment le supprimer, dans sendmailable notamment.
    Tu peux tout simplement le supprimer.. Ton formulaire il envoie les variables sujet, destinataire et message. Passe ces variables à SendMailable depuis le controlleur.

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Je commence à me perdre, entre le tuto et ton exemple... Il me faut pas grand chose décidément...
    J'ai tout cassé là...

    Faut que je reprenne ton tuto, et ensuite que je vois pour ajouter les données d'un formulaire.
    J'y retourne.
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    J'ai refais le tuto mais :

    Swift_TransportException (554)
    Expected response code 354 but got code "554", with message "554 5.5.1 Error: no valid recipients "
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Bon, c'est reparti.
    J'arrive sur ma page du formulaire du mail, puis je valide et error no message.

    Ma route web.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Route::get('/send/email', 'Controller@mail');
    Route::get('/mail', ['as' => 'mail', function()
    {
      return view('mail');
    }]);
    Le sendmailable :
    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
     
        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('email.name');
        }

    Et la fonction mail du 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('andreani.patrice@net-c.fr')->send(new SendMailable($name));
     
       return 'Email envoyé';
    }
     
    }
    Donc, j'en reviens à mon pbm, passer les données du formulaire à ma fonction d'envoie du mail dans le controller.
    Ais-je un truc à modifier dans les routes ?
    Ou c'est uniquement la fonction mail du controller qui doit récupérer les données du formulaire ?
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Alors je suis sur téléphone là mais de ce que je vois dans sendmailable, dans la fonction build() tu ne passes pas les variables dans la vue avec la fonction with() voir l'exemple que j'avais mis plus haut.

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    J'avance pas... Suis un vrai boulet, ça m'agace.

    Il faut que dans sendmailable, j'ai quelque chose comme cela : if (isset($_POST['sujet'])) pour récupérer les données du formulaire, puis return view ->with('sujet') pour les passer ensuite à la vue de confirmation d'envoie ? Mais comment marche le controller alors ? C'est pas à lui que je dois passer les données du formulaire, ou lui qui doit les récupérer ?
    Je suis bien perdu là...
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Points : 875
    Points
    875
    Par défaut
    Alors c'est à peu près ça :

    1) route vers le formulaire
    2) route vers le contrôleur d'envoi. Ce contrôleur récupère les données avec $request->get(). Depuis ce contrôleur tu envois à sendmailable. Dans sendmailable, dans sa fonction build envois les données à la vue avec la fonction with().

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 759
    Points : 184
    Points
    184
    Par défaut
    Bon, récapitulons avec le code.

    Mes routes web.php. mail qui est le formulaire et /send/mail qui envoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Route::get('/send/email', 'Controller@mail');
    Route::get('/mail', ['as' => 'mail', function()
    {
      return view('mail');
    }]);

    sendmailable qui doit donc récupérer les données du formulaire (avec $request->get() , il faut que j'arrive à voir comment ça fonctionne) pour les envoyer ensuite au controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public function __construct($name)
        {
            $this->name = $name;
        }
     
     
        public function build()
        {
            if (isset($_POST['sujet'])) {
            return $this->from($this->store->email)->view('email.name')->with('datafields', 'sujet', $this->inputs);
            return $this->view('email.name');
            }
        }

    Ma fonction mail dans le controller, qui prend les données de sendmailable et envoie le mail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function mail()
    {
       $name = 'Patrice';
       Mail::to('andreani.patrice@net-c.fr')->send(new SendMailable($name));
     
       return 'Email envoyé';
    }
    J'espère que je suis clair et que j'ai bien compris le fonctionnement, enfin, pour essayer en code de le mettre en pratique ?
    ANDRE Ani
    GNU/Linux et Informatique Libre
    https://andre-ani.fr

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