Correo en Laravel
Manejo del correo en Laravel
Montar el sistema de ficheros remoto:
sshfs usuario@alumno.me:/home/usuario/todo/ servidor -p 22
Conexión al VPS
ssh usuario@alumno.me
Enviar mensaje de prueba desde consola (para comprobar el funcionamiento del servidor de correo):
sudo apt install mailutils mail -s "Email de prueba" paco.portada@protonmail.com <<< "Este es el cuerpo del correo"
Configuración del correo en Laravel
Uso de un servidor de correo (Postfix, por ejemplo) en el propio equipo
cd ~/notesApp nano .env
fichero .env (en la carpeta del proyecto de Laravel):
MAIL_MAILER=smtp MAIL_HOST=127.0.0.1 MAIL_PORT=25 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_FROM_ADDRESS="admin@alumno.me" MAIL_FROM_NAME="${APP_NAME}"
fichero config/mail.php
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'scheme' => env('MAIL_SCHEME'),
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', '127.0.0.1'),
'port' => env('MAIL_PORT', 25),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
'verify_peer' => false,
],
Uso de Postmark:
Uso de Gmail:
fichero .env (en la carpeta del proyecto de Laravel):
MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=my_name@gmail.com MAIL_PASSWORD=my_gmail_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=my_name@gmail.com MAIL_FROM_NAME="${APP_NAME}"
Más información:
How to Send Emails in Laravel using Gmail SMTP and API
How to Send Mail using Gmail Account in Laravel
Laravel 9 Send Mail using Gmail SMTP Server
Mail Relay:
Uso de mailtrap.io
Sending HTML Emails in Laravel: SMTP & API Tutorial
Envío de un email desde un formulario
Añadir las rutas en el fichero routes/web.php
<?php
use App\Http\Controllers\EmailController;
Route::get('/email', [EmailController::class, 'create']);
Route::post('/email', [EmailController::class, 'sendEmail'])->name('send.email');
Crear el controlador
php artisan make:controller EmailController
Añadir este contenido al fichero app\Http\Controllers\EmailController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
class EmailController extends Controller
{
public function create()
{
return view('email');
}
public function sendEmail(Request $request)
{
$request->validate([
'email' => 'required|email',
'subject' => 'required',
'content' => 'required',
]);
$data = [
'subject' => $request->subject,
'email' => $request->email,
'content' => $request->content
];
Mail::send('email-template', $data, function($message) use ($data) {
$message->to($data['email'])
->subject($data['subject']);
});
return back()->with(['message' => 'Email successfully sent!']);
}
}
Crear el fichero resources\views\email.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Mail Send in Laravel</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<meta name="csrf-token" content="{{ csrf_token() }}" />
</head>
<body>
<div class="container">
<h1>Mail Send Example</h1>
@if(session()->has('message'))
<div class="alert alert-success">
{{ session()->get('message') }}
</div>
@endif
<form action="{{ route('send.email') }}" method="post">
@csrf
<div class="form-group">
<label>Email:</label>
<input type="email" name="email" class="form-control" placeholder="Enter Email">
@error('email')
<span class="text-danger"> {{ $message }} </span>
@enderror
</div>
<div class="form-group">
<label>Subject:</label>
<input type="text" name="subject" class="form-control" placeholder="Enter subject">
@error('subject')
<span class="text-danger"> {{ $message }} </span>
@enderror
</div>
<div class="form-group">
<strong>Content:</strong>
<textarea name="content" rows="5" class="form-control" placeholder="Enter Your Message"></textarea>
@error('content')
<span class="text-danger"> {{ $message }} </span>
@enderror
</div>
<div class="form-group">
<button type="submit" class="btn btn-success save-data">Send</button>
<a href={{ route('dashboard') }}>Return</a>
</div>
</form>
</div>
</body>
</html>
Crear el fichero resources\views\email-template.blade.php
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Hello!</div>
<div class="card-body">
@if (session('resent'))
<div class="alert alert-success" role="alert">
{{ __('A fresh mail has been sent to your email address.') }}
</div>
@endif
{!! $content !!}
</div>
</div>
</div>
</div>
</div>
Accederemos desde el navegador a la ruta email para hacer el envío:
Error: Symfony \ Component \ Mailer \ Exception \ TransportException Unable to connect with STARTTLS: stream_socket_enable_crypto()
Modificar el fichero config/mail.php
Añadir estas líneas a la configuración de smtp:
'auth_mode' => null, 'verify_peer' => false,
cd ~/todo sudo nano config/mail.php
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', '127.0.0.1'),
'port' => env('MAIL_PORT', 25),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN'),
'auth_mode' => null,
'verify_peer' => false,
],
Más información:
Laravel 11 Send Email with Attachment Example

Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.