Error al enviar correo con Laravel

Publicado por Lynn
hace 1 año

Hola a todos,

Estoy teniendo un problema al tratar de enviar correos electrónicos con Laravel. Tengo un formulario de contacto en mi sitio web y estoy intentando enviar los detalles del formulario por correo electrónico al destinatario después de que el usuario envíe el formulario.

He seguido la documentación de Laravel para enviar correos electrónicos y he configurado mi archivo env con los detalles correctos del servidor de correo. También he creado una clase Mailable para configurar el correo electrónico y he verificado que los detalles del correo sean correctos.

Aquí está mi código en la clase Mailable:

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ContactFormEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    /**
     * Create a new message instance.
     *
     * @param  array  $data
     * @return void
     */
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.contact-form')
                    ->subject('Nuevo mensaje de contacto');
    }
}

Sin embargo, cuando intento enviar el correo electrónico usando el siguiente código:

use App\Mail\ContactFormEmail;
use Illuminate\Support\Facades\Mail;

$data = [
    'name' => 'John Doe',
    'email' => '[email protected]',
    'message' => 'Hola, este es un mensaje de prueba.'
];

Mail::to('[email protected]')->send(new ContactFormEmail($data));

Recibo un error que dice: "Failed to authenticate on SMTP server with username "[email protected]" using 3 possible authenticators. Authenticator LOGIN returned Expected response code 235 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials x195sm5260015pfh.119 - gsmtp ".".

He verificado mis credenciales de correo y son correctas, y estoy usando una cuenta de Gmail para enviar el correo electrónico. ¿Qué podría estar causando este error? ¿Cómo puedo solucionarlo?

Agradezco cualquier ayuda que puedan brindar. ¡Gracias!

Laravel correo error
Respuesta de Gordon Shumway
hace 1 año

¡Hola Lynn!

El mensaje de error que estás viendo indica que las credenciales proporcionadas para el servidor SMTP no son aceptadas. Esto puede deberse a varios motivos. Aquí te dejo unas posibles soluciones:

  1. Revisar las credenciales: Asegúrate una vez más de que el nombre de usuario (tu dirección de correo de Gmail) y la contraseña son correctos. Recuerda que si usas verificación en dos pasos en tu cuenta de Gmail, debes generar una contraseña de aplicación específica para usarla en tu aplicación.

  2. Permitir aplicaciones menos seguras: Google puede bloquear el intento de iniciar sesión si considera que la aplicación es "menos segura". Para superar esto, tendrás que habilitar el acceso de aplicaciones menos seguras en las opciones de seguridad de tu cuenta de Google (aunque esto no es recomendable si buscas mantener altos estándares de seguridad).

  3. Captcha temporal: A veces, después de introducir la contraseña incorrecta varias veces o por otras razones, Google requiere resolver un captcha para desbloquear la cuenta. Puedes hacerlo visitando https://accounts.google.com/b/0/DisplayUnlockCaptcha mientras estás conectado a tu cuenta de Gmail.

Aparte de verificar esos puntos, revisa tu archivo .env para asegurarte de que tienes bien configurados los siguientes valores:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=tu-contraseña
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"

Si después de hacer todas estas verificaciones sigues teniendo problemas, considera revisar los siguientes puntos adicionales:

  • Autenticación de dos factores activada: Si tienes activada la autenticación de dos factores en tu cuenta de Gmail, deberás crear una contraseña de aplicación dentro de tu cuenta y usar esa contraseña en lugar de tu contraseña regular.

  • Configurar explícitamente en el Mailer de Laravel: En algunos casos, se requiere configurar explícitamente los valores en el código de Laravel y hacer un clear cache de la configuración, algo como esto:

    Config::set('mail.username', env('MAIL_USERNAME'));
    Config::set('mail.password', env('MAIL_PASSWORD'));
    
    // Luego de cambiar la configuración
    Artisan::call('config:cache');

Pruébalo y si sigues teniendo problemas, por favor, comparte si hay algún detalle adicional o cambio que hayas realizado. ¡Éxito con la solución del problema!