Inviare email con SMTP e Laravel

Mattepuffo's logo
Inviare email con SMTP e Laravel

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!


Condividi

Commentami!