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 :
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 :
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 :
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) :
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);
}
} |
Partager