Inviare email con SMTP e Laravel
Non so se sono io che non ho visto quello che cercavo, ma la documentazione dell'invio di email con SMTP in Laravel non è proprio completa.
Intanto sembra partire dal presupposto di usare una view, che io non ho perchè sto usando Laravel per una API; poi non parla della configurazione del file .env.
Noi partiamo proprio da qua; dovete inserire le impostazioni della vostra email in un modo simile a questo:
MAIL_MAILER=smtp
MAIL_HOST=SMTP_HOST
MAIL_PORT=PORTA_SMTP
MAIL_USERNAME=EMAIL_DA_CUI_INVIARE
MAIL_PASSWORD=PASSWORD_EMAIL
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=EMAIL_DA_CUI_INVIARE
MAIL_FROM_NAME="${APP_NAME}"
Ovviamente le impostazioni dipendono dal vostro provider.
A questo punto, vi posto il mio controller:
class AuthController extends Controller {
public function pwdRecovery(Request $req) {
$data = $req->json()->all();
if (!empty($data)) {
try {
$user = User::where('email', $data['email'])
->first();
if ($user) {
$html = 'TESTO_HTML';
$subject = 'Recupero password';
Mail::send([], [], function ($message) use ($html, $user, $subject) {
$message
->to($user->email)
->subject($subject)
->setBody($html, 'text/html');
});
} else {
return response()->json([
'res' => 'ko',
'message' => 'Email inesistente!'
]);
}
} catch (QueryException $ex) {
return response()->json([
'res' => 'ko',
'message' => 'Errore=> ' . $ex->getMessage()
]);
}
} else {
return response()->json(array(
"res" => "ko",
"message" => "Dati mancanti!"
));
}
}
}
Il metodo che vedete servirà per il recupero password; alla route gli mando l'email in formato JSON:
{
"email": "email@email.it"
}
L'oggetto Mail usando il metodo send con diversi parametri; non avendo noi una view gli passiamo vuoti i primi, e poi impostiamo i parametri nella closure.
Facciamo un controllo che l'email esista nel db, ed in caso inviamo l'email (e facciamo tutte le altre operazioni che ci servono).
Infine ecco la route:
Route::group(["prefix" => "utenti"], function () {
Route::post('/recover', [AuthController::class, 'pwdRecovery']);
});
Enjoy!
php laravel mail smtp env
Commentami!