Autour de Laravel

Envoi de mail

Avatar de elhadjdioumabarry
elhadjdioumabarry

Salut les amis je vais envoi un mail en ajoutant une image dans le body j'ai lis la documentation mais j'ai du mal à comprendre quelqu'un pourai m'aider sa c'est ma classe mailable class ContactMessage extends Mailable { use Queueable, SerializesModels;

public $msg;
/**
 * Create a new message instance.
 *
 * @return void
 */
public function __construct($msg)
{
    //
    $this->msg = $msg;

}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->subject('Bienvenue sur laravel')
        ->markdown('emails.contact.message');
}

}

et la c'est mon message @component('mail::message')

Introduction

  • {{ $msg->nom }}
  • {{ $msg->email }}

@component('mail::panel') {{ $msg->message }} @endcomponent

Thanks, {{ config('app.name') }} @endcomponent

j'ai toujours une erreur

Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Je ne suis pas du tou un expert en mail (je ne l'ai fait qu'une fois). Mais pourrais-tu nous montrer où tu appelle cette classe. Deuxième point, tu dis avoir une erreur, pourrais-tu nous la citer ?

Je vois que tu déclare $msg dans ta classe, puis tu a un $msg dans ton construct(). Le $msg de ton construct et celui de ta classe ne sont théoriquement pas les mêmes mais ils ont le même nom. Je pense que tu devrait enlever le public $msg; Ensuite, tu passe $msg à $this mais tu ne t'en sers pas dans ton build(); Donc je ne suis per ceratin que ça arrive jusqu'à ta vue...

Voilà l'exemple fonctionnel de mon code qui fonctionne:

public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('admin@monsite.fr')
                    ->view('emails.partage_ecran')
                    ->with([
                        'email' => $this->data['email'],
                        'image' => $this->data['image'],
                    ]);
    }

Dans cet example j'ai attaché appelé ma classe en lui passant un array avec email et image (et non pas Emile&Image...) et je l'ai renvoyé vers ma vue pour la mise en forme. Attention aussi à bien avoir configuré ta méthode d'envoi (serveur SMTP ou autre)

Posté il y a 2 mois
Avatar de nash
nash

salut,

Si tu utilise un component, il faut aussi injecter les valeurs des variables de la vue.

Dans un component les variables sont isolés

Exemple

@component('components/b-news')
                    @slot('picture', '')
                    @slot('title', 'Actualité 1')
                    @slot('date', '17.05.2018')
                    @slot('content')
                        Lorem ipsum dolor sit amet consectetur adipisicing elit. In vel, eius similique impedit expedita rerum sint reprehenderit maxime placeat vitae veritatis tenetur, iusto libero dolorum, quisquam sequi maiores voluptate nihil obcaecati esse ratione voluptatem quo temporibus? Quas, excepturi. Repellat, deserunt!
                        <br>Lorem ipsum dolor sit amet consectetur adipisicing elit. Sequi quod optio quo sit illum necessitatibus?
                    @endslot
                @endcomponent
Posté il y a 2 mois
Avatar de elhadjdioumabarry
elhadjdioumabarry

j'ai utiliser $msg pour passer l'utiliser au niveau de la vue pour afficher le nom,email et le message; que doise je faire dans $this->data['image'] 'image' => $this->data['image'] et comment on pourais acceder à la variable $data dans la vue

Posté il y a 2 mois
Avatar de elhadjdioumabarry
elhadjdioumabarry

j'ai texter cette methode aussi mais la lien est brise j'utilise maildev pour envoi les mails en local class ContactMessage extends Mailable { use Queueable, SerializesModels;

public $msg;
public $message;
/**
 * Create a new message instance.
 *
 * @return void
 */
public function __construct($msg)
{
    //
    $this->msg = $msg;
    $this->message = (object) array('image' => '/assets/images/kali.png');

}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->subject('Bienvenue sur laravel')->markdown('emails.contact.message');
}

}

Posté il y a 2 mois
Avatar de nash
nash

Tu nous dis que tu as une erreur. Quelle est erreur ? message svp

$this->message = (object) array('image' => asset('/assets/images/kali.png'));
Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Encore une fois, essaie de ne pas donner le même nom entre ton $msg local et celui recu dans ton construct.

Essaie:

public function __construct($msge)
{
    //pour que ton $msg local et $msge reçu ne se confondent pas
    $this->msg = $msge;

Je ne sais pas si c'est ça qui crée l'erreur mais en therme de bonne pratique, deux variable ayant le même nom c'est pas top.

Ensuite, dans le code que je t'ai envoyé c'est

->with([
        'email' => $this->data['email'],
        'image' => $this->data['image'],
    ])

qui envoie les données à ma vue et ainsi je peux utiliser {{ $email }} et {{ $image }} dans mon blade (la variable data je ne l'ai pas envoyée telle quelle)

Posté il y a 2 mois

Vous ne pouvez pas répondre à ce sujet.