In Laravel possiamo inviare le e-mail usando l'SMTP locale.
Inseriamo i seguenti dati nel file di configurazione .env.
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=noreply@sito.tld
MAIL_FROM_NAME=Sito
Aggiorniamo quindi la cache della configurazione.
php artisan config:cache
Creiamo una classe di tipo Mailable nella directory app/Mail< con i seguenti contenuti.
<?php
namespace App\Mail;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;
/**
* The user instance.
*
* @var User
*/
public $user;
public $text;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(User $user, $text)
{
$this->user = $user;
$this->text = $text;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Benvenuto/a sul nostro sito' )->view('emails.welcome');
}
}
La classe accetta due parametri nel costruttore: un'istanza del modello User e una variabile opzionale che possiamo usare come testo del messaggio. Quando viene invocato il metodo build(), questi dati vengono passati alla view Blade che si trova nella directory /resources/views/emails. Si tenga presente che se non viene invocato il metodo subject(), Laravel userĂ il nome della classe come oggetto dell'e-mail.
Definiamo quindi la view Blade in questo modo:
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Benvenuto/a sul nostro sito</title></title>
</head>
<body>
<h1>Ciao, {{ $user->name }}</h1>
<p>{{ $text }}</p>
</body>
</html>
A questo punto si passa a creare il metodo del controller che gestirĂ la richiesta.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Hash;
class RegisterController extends Controller
{
public function signup(Request $request)
{
// Validazione
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->password = Hash::make( $request->input('password') );
$user->save();
Mail::to($user)->send(new WelcomeEmail($user, 'Lorem ipsum dolor sit.'));
return redirect()->route('login');
}
}