In your .env (never commit real values):
MAIL_MAILER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=[YOUR_VERIFIED_SENDER]
MAIL_FROM_NAME="Your App"
Set MAIL_PASSWORD to your SendGrid API key (at least Mail permissions) through your env management, not in committed files.
Notes:
1. MAIL_USERNAME is the literal string apikey. Putting your email here is the classic failure.
2. MAIL_ENCRYPTION=tls pairs with port 587. Port 465 wants ssl.
3. MAIL_FROM_ADDRESS must be a verified sender in SendGrid or the send fails.
4. After changing .env, clear the config cache (config:clear) or the old values stick.
5. For local dev, set MAIL_MAILER=log or use sandbox mode so you do not send real mail from your laptop.