Intentando que el correo electrónico de Laravel 5 funcione


154

Estoy tratando de enviar un correo electrónico a un usuario específico escribiendo la URL, pero recibo el siguiente error:

Swift_TransportException en AbstractSmtpTransport.php línea 383: Código de respuesta esperado 250 pero obtuvo el código "530", con el mensaje "530 5.7.1 Requiere autenticación

Hasta ahora solo estoy tratando de que funcione con Gmail. ¿Cómo puedo hacer que esto funcione?

Esto es lo que tengo hasta ahora: mail.php

<?php
    return [
        'driver' => env('MAIL_DRIVER',' smtp'),
        'host' => env('MAIL_HOST', 'smtp.gmail.com'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' =>"MyUsername@gmail.com" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('MyUsername@gmail.com'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

Esto es lo que tengo en las rutas:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('example@gmail.com', 'HisName')->subject('Welcome!');
    });
});

Esto es lo que tengo en mi controlador:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}

Y esto es lo que está en mi archivo .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

44
Use mailtrap.io para realizar las pruebas
pase el

Buen consejo en mailtrap.io @roll
Ben Everard

Recibí exactamente el mismo error al usar mailtrap.io
luisfer

Respuestas:


243

Sé que está funcionando para ti ahora @ Vantheman6, pero esto es lo que funcionó para mí en caso de que sea lo mismo para otra persona.

Agregué a mi archivo .env los detalles del servicio de correo que estoy usando. Así que asegúrese de los siguientes detalles

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

en el archivo .env son precisos.

NOTA: No olvide reiniciar su servidor después de editar el archivo .env para que elija los nuevos datos que ingrese allí.

Si no reinicia su servidor, el archivo .env continuará presentando los datos de correo antiguos a la aplicación aunque haya realizado cambios que pueden causar este error.


59
Wow, esa 'Nota' me salvó. ¡No sabía que los vars de ENV se almacenaban en caché al inicio!
Gerben Jacobs

¿Podría actualizar la respuesta y resaltar el servidor de reinicio, en lugar del archivo de configuración?
mrwaim

2
@mrwaim, pensé que el reinicio del servidor es exactamente lo que especifiqué en la nota, a menos que no entienda lo que estás implicando.
Osei-Bonsu Christian

1
Sugeriría eliminar todo antes de "Nota:" - lo que ayudó fue la nota, y no las cosas anteriores. Sugeriría, si desea conservar las otras partes, póngalas después de la nota. 3 Las personas votaron por el comentario de 'Nota', por lo que la Nota probablemente también les ayudó.
mrwaim

22
Si previamente ha almacenado en caché su configuración php artisan config:cache, reiniciar el servidor no recogerá la configuración actualizada. Intenta correr de php artisan config:cachenuevo
darronz

53

Mi configuración de archivo .env es así para laravel 5.1

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls

Lo más importante aquí es que creé la contraseña específica de la aplicación de Gmail (16 dígitos).

Necesito revelar una cosa más ya que no tuve suerte para ninguna de las configuraciones. Es decir, cada vez que cambie el archivo .env necesito ejecutar este comando

php artisan config:cache

Y esto es lo más importante porque sin este comando laravel ejecuta configuraciones previas desde su caché. Me tomó más de 10 horas resolverlo.


1
Seguí usando php artisan cache:clearcuándo php artisan config:cachees lo que me resolvió. ¡Gracias!
timgavin

44
votó a favor debido a su nota sobrephp artisan config:cache
darronz

35

Está recibiendo un error de autenticación porque el nombre de usuario y la contraseña en su archivo de configuración están mal configurados.

Cambia esto:

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),

A esto:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

El envmétodo verifica su archivo .env. En su archivo .env los llama MAIL_USERNAME, así que eso es lo que necesita pasar al envmétodo.

Un consejo para la solución de problemas: agregue dd(Config::get('mail'));para que pueda ver la configuración real generada . Esto lo ayudará a detectar problemas como este y saber exactamente qué información intentará utilizar Laravel. Por lo tanto, es posible que desee detener eso en su ruta de prueba temporalmente para examinar lo que tiene:

Route::get('test', function()
{
    dd(Config::get('mail'));
});

Así que cambié mi archivo mail.php para reflejar sus sugerencias '' username '=> env (' MAIL_USERNAME '),' y 'password' => env('MAIL_PASSWORD'), lo que encuentro interesante porque en todas partes me dice que ingrese su dirección de correo electrónico y contraseña para eso. Todavía recibo un error Swift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required. I'm sorry but where do i actually place the " dd(Config::get('mail'));. el directorio de configuración contiene muchos archivos
Vantheman6

Vea mi respuesta actualizada, con un ejemplo de cómo examinar su configuración.
jszobody

Eso es increíble, todavía recibo un error, pero en realidad puedo ver lo que está haciendo. Por alguna razón, está tratando de pasar `" host "=>" mailtrap.io "` al entorno, aunque en php por correo estoy diciendo'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6

Verifique dos MAIL_HOSTveces en su archivo
.env

Es exacto. MAIL_HOST=smtp.gmail.com Entonces, lo que terminé haciendo fue eliminar todo el env de cada parte del archivo mail.php. Y ahora está pasando la información correcta. OMG Gracias funcionó. Tú eres el hombre
Vantheman6


13

Por fin lo tengo! Solo para compartir, hay más configuraciones que solo .env

Esto es .env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config / mail.php también necesita ingresar la dirección y el nombre para que funcione.

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

11

Si alguna vez tiene el mismo problema e intenta todo en línea y no funciona, es probable que el archivo de caché de configuración esté enviando la información incorrecta. Puede encontrarlo en bootstrap / cache / config.php. Asegúrese de que las credenciales estén ahí. Me tomó una semana darme cuenta de eso. Espero que esto ayude a alguien algún día.


Señor, merecía un buen Burdeos, ¡muchas gracias! Me di cuenta de que el nombre de usuario y la contraseña estaban vacíos en ese archivo, incluso cuando los llené en los dos archivos apropiados. ¡Desde allí, supe qué hacer! Merci!
Gregordy

¡GRACIAS! ¡En serio, he estado depurando durante una hora sin NINGUNA PISTA pero ESTO! ESTO
Ahmad Alfy

11

Para fines de desarrollo, https://mailtrap.io/ le proporciona todas las configuraciones que deben agregarse en el archivo .env. P.ej:

Host:   mailtrap.io
Port:   25 or 465 or 2525
Username:   cb1d1475bc6cce
Password:   7a330479c15f99
Auth:   PLAIN, LOGIN and CRAM-MD5
TLS:    Optional

De lo contrario, para fines de implementación, puede obtener las credenciales smtp que se agregarán en el archivo .env desde el correo (como gmail n all)

Después de la adición, asegúrese de reiniciar el servidor


Después de la adición, asegúrese de reiniciar el servidor. Esta oración resolvió mi problema.
Hos Mercury

8

A mí también me pasa.

Es porque cuando editamos el .envarchivo necesitamos reiniciar el servidor. Simplemente detenga la corriente php artisan servey vuelva a iniciarla. Esto funcionará seguro.

Si todavía no funcionó, intente hacerlo php artisan config:cache


5

Para referencia futura a las personas que vienen aquí. después de ejecutar el comando que se dio en la tercera respuesta aquí ( estoy usando ahora Laravel 5.3 ).

php artisan config:cache

Puede encontrar este problema:

[ReflectionException]
Class view does not exist

En ese caso, debe volver a agregarlo manualmente a su lista de proveedores en el archivo app.php. IR A: app->config->app.php->'providers[]'y agregarlo, así:

Illuminate\View\ViewServiceProvider::class,

Espero que ayude a alguien.


4

He tenido el mismo problema; mi MAIL_ENCRYPTIONestaba tlsencendido mail.phppero estaba nullen el .envarchivo.
Así que cambié nulla tlsy funcionó!


Este fue el caso!
夏 期 劇場

3

Ninguna de las soluciones anteriores funcionó para mí en localhost. Incluso permití el acceso desde aplicaciones menos seguras, permití el acceso a través de captcha de desbloqueo de pantalla y configuré el par de verificación y verifiqué el nombre de par a falso para SSL.

Finalmente, utilicé la solución de prueba SMTP de código abierto de MailHog. Los pasos son los siguientes:

  1. Descargue la última versión de MailHog para su sistema operativo
  2. Especifique la siguiente configuración en su archivo .env

MAIL_DRIVER = smtp

MAIL_HOST = 127.0.0.1

MAIL_PORT = 1025

MAIL_USERNAME = testuser

MAIL_PASSWORD = testpwd

MAIL_ENCRYPTION = nulo

MAIL_FROM_ADDRESS=theaddress@youwant.com

  1. Ejecute el archivo descargado de MailHog
  2. Enviar correo electrónico
  3. Compruebe el correo electrónico enviado yendo a localhost: 8025

3

Eso simplemente significa que su servidor no tiene acceso al servidor SMTP.

Puedes probar esto haciendo:

telnet <smtpServer> <smtpPort>

Debería obtener el error Acceso denegado.

La solución es usar otro servidor SMTP al que pueda acceder su servidor.


2

Debe reiniciar el servidor y ejecutar estos comandos:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache

Eso debería funcionar.


0

Si sus resultados dd(Config::get('mail'));son nulos, simplemente use el comando

php artisan config:clear

0

Mi opinión después de hacer cambios en sus archivos .env reinicia su servidor y sirve la aplicación nuevamente. Solo para estar seguro del error real. El php artisan clear y cache luego funciona bastante bien.


-1

Tuve el mismo problema que tú, lo puse a trabajar.

En primer lugar, debe verificar que la configuración de .env esté configurada correctamente. Aquí están mis configuraciones:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls

Asegúrese de que su contraseña no esté entre comillas :).

Y en config / mail.php tiene lo siguiente, sin los comentarios.

<?php

return [

'driver' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', '587'),
'from' => ['address' => 'yourusername', 'name' => 'yourname'],
'encryption' => env('MAIL_ENCRYPTION','tls'),
'username' => env('MAIL_USERNAME', 'username@gmail.com'),
'password' => env('MAIL_PASSWORD', 'password'),
'sendmail' => '/usr/sbin/sendmail -bs',

'pretend' => false,

];

Espero que funcione para ti :)


-1

En mi caso: reinicie el servidor y ejecute el php artisan config:clearcomando.


-2
  1. Vas a la pistola de correo
  2. Haga clic en Destinatarios autorizados
  3. Agregue la dirección de correo electrónico a la que desea enviar el correo.
  4. Verifique el mensaje enviado al correo.
  5. Bravo! ... Eres bueno para ir.

2
Por favor perdona mi ignorancia. ¿Cómo resuelve la respuesta anterior los problemas de correo electrónico de Laravel5 en la pregunta?
jww
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.