php - mail - Intentando que el correo electrónico de Laravel 5 funcione
mail::send laravel (17)
- Vas al Mailgun
- Haga clic en Destinatarios autorizados
- Agregue la dirección de correo electrónico a la que desea enviar el correo.
- Verifique el mensaje enviado al correo.
- Bravo! ... Eres bueno para ir.
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'' =>"[email protected]" , ''name'' => "example"],
''encryption'' => ''tls'',
''username'' => env(''[email protected]''),
''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(''[email protected]'', ''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
[email protected]
MAIL_PASSWORD=MyPassword
A mí también me pasa.
Es porque cuando editamos el archivo
.env
necesitamos reiniciar el servidor. Simplemente detenga el servicio actual dephp artisan serve
y comience de nuevo. Esto funcionará seguro.
Si aún no funciona, intente hacer
php artisan config:cache
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.
En mi caso: reinicie el servidor y ejecute
php artisan config:clear
command.
Eso simplemente significa que su servidor no tiene acceso al servidor SMTP.
Puede 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.
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(''[email protected]''),
''password'' => env(''MyPassword''),
A esto:
''username'' => env(''MAIL_USERNAME''),
''password'' => env(''MAIL_PASSWORD''),
El método
env
comprueba su archivo .env.
En su archivo .env llama a estos
MAIL_USERNAME
, así que eso es lo que necesita pasar al método
env
.
Un consejo para la resolución de problemas: agregar
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''));
});
He tenido el mismo problema;
mi
MAIL_ENCRYPTION
era
tls
en
mail.php
pero era
null
en el archivo
.env
.
¡Así que cambié
null
a
tls
y funcionó!
Mi configuración de archivo .env es así para laravel 5.1
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
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.
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 el nombre del par en false para SSL.
Finalmente, utilicé la solución de prueba SMTP de código abierto de MailHog. Los pasos son los siguientes:
- Descargue la última versión de MailHog para su sistema operativo
- 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
- Ejecute el archivo descargado de MailHog
- Enviar correo electrónico
- Compruebe el correo electrónico enviado yendo a localhost: 8025
Para fines de desarrollo, https://mailtrap.io/ 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
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
[email protected]
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'' => ''[email protected]'' , ''name'' => ''YourName'' ],
''encryption'' => env(''MAIL_ENCRYPTION'', ''tls''),
''username'' => env(''MAIL_USERNAME''),
''password'' => env(''MAIL_PASSWORD''),
''sendmail'' => ''/usr/sbin/sendmail -bs'',
''pretend'' => false,
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
[email protected]
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.
Si alguna vez tiene el mismo problema y prueba 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.
Si sus resultados de
dd(Config::get(''mail''));
son nulos simplemente use el comando
php artisan config:clear
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'', ''[email protected]''),
''password'' => env(''MAIL_PASSWORD'', ''password''),
''sendmail'' => ''/usr/sbin/sendmail -bs'',
''pretend'' => false,
];
Espero que funcione para ti :)
el problema se resolverá borrando la memoria caché
php artisan config:cache
Para futuras referencias 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.