Este módulo proporciona una implementación robusta para el envío de correos electrónicos en Laravel, utilizando SMTP y sistema de colas para un manejo eficiente de los correos.
- PHP >= 7.4
- Laravel >= 8.0
- Composer instalado
- Acceso a un servidor SMTP
- Configuración SMTP simplificada
- Sistema de límites de envío por hora
- Monitoreo en tiempo real del estado del servicio
- Comandos de consola para pruebas y diagnóstico
- Integración con el sistema de colas de Laravel
- Manejo de plantillas de correo
# Clonar el repositorio en la carpeta de tu elección
git clone https://github.com/jjcordoba/modulo-smpt-laravel.git
# Entrar al directorio del módulo
cd modulo-email
- Copie los archivos del módulo a las carpetas correspondientes de su proyecto Laravel:
- Copie
/app/Services/EmailService.php
aapp/Services/
de su proyecto - Copie
/app/Console/Commands/*
aapp/Console/Commands/
de su proyecto - Copie
/config/mail.php
aconfig/
de su proyecto (si no existe) - Copie
/resources/views/emails/
aresources/views/
de su proyecto
- Copie
- Copie las variables de entorno necesarias a su archivo
.env
:
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your-username
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@example.com
MAIL_FROM_NAME="${APP_NAME}"
# Configuración de límites de envío
MAIL_RATE_LIMIT=100 # correos por hora
- Agregue el siguiente proveedor de servicios en
config/app.php
:
'providers' => [
// ...
App\Providers\EmailServiceProvider::class,
];
- Configure su sistema de colas en
.env
:
QUEUE_CONNECTION=database
- Ejecute la migración para la tabla de colas:
php artisan queue:table
php artisan migrate
Permite enviar un correo de prueba para verificar la configuración:
# Envío básico
php artisan email:test recipient@example.com
# Envío con opciones adicionales
php artisan email:test recipient@example.com --subject="Prueba" --content="Mensaje de prueba"
Muestra información sobre el estado del servicio de correo:
# Ver estado actual
php artisan email:status
# Monitorear en tiempo real
php artisan email:status --watch
# Reiniciar contadores de límite
php artisan email:status --reset
use App\Services\EmailService;
class ExampleController extends Controller
{
protected $emailService;
public function __construct(EmailService $emailService)
{
$this->emailService = $emailService;
}
public function sendEmail()
{
$this->emailService->send(
'recipient@example.com',
'Asunto del correo',
'emails.template-name',
['key' => 'value']
);
}
}
El módulo incluye un sistema de límites de envío por hora para prevenir el abuso:
- Monitoreo de correos enviados por hora
- Límite configurable de envíos por hora
- Reinicio automático de contadores
- Comando para reinicio manual de contadores
-
Error de conexión SMTP
- Verifique las credenciales en el archivo
.env
- Confirme que el puerto SMTP no esté bloqueado
- Valide la configuración de encriptación (TLS/SSL)
- Asegúrese de que su servidor SMTP esté activo
- Verifique las credenciales en el archivo
-
Límite de envío alcanzado
- Use el comando
email:status
para verificar el estado - Reinicie los contadores si es necesario
- Considere aumentar el límite en la configuración
- Verifique los logs para detectar posibles abusos
- Use el comando
-
Errores en las plantillas
- Verifique la existencia de la plantilla en
resources/views/emails
- Valide la sintaxis de Blade en la plantilla
- Confirme que todas las variables requeridas estén definidas
- Pruebe la plantilla con datos de ejemplo
- Verifique la existencia de la plantilla en
-
Problemas con las colas
- Verifique que el worker de colas esté ejecutándose
- Revise los logs de Laravel para errores
- Confirme la configuración de la conexión de cola
- Ejecute
php artisan queue:retry all
para reintentar trabajos fallidos
Si encuentra algún problema o tiene sugerencias de mejora, por favor:
- Revise los issues existentes o cree uno nuevo
- Fork el repositorio
- Cree una rama para su feature (
git checkout -b feature/AmazingFeature
) - Commit sus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abra un Pull Request
Este módulo está licenciado bajo la Licencia MIT. Consulte el archivo LICENSE para más detalles.