web-dev-qa-db-fra.com

Essayer de faire fonctionner Laravel 5 email

J'essaie d'envoyer un courrier électronique à un utilisateur spécifié en tapant l'URL, mais le message d'erreur suivant s'affiche:

Swift_TransportException dans la ligne AbstractSmtpTransport.php 383: Réponse attendue, code 250 mais code "530", avec le message "530 5.7.1 Authentification requise

Jusqu'à présent, j'essaie simplement de le faire fonctionner avec Gmail. Comment puis-je obtenir que cela fonctionne?

C'est ce que j'ai jusqu'ici: 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,
    ];

Voici ce que j'ai dans les itinéraires:

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

Voici ce que j'ai dans mon contrôleur:

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

Et voici ce qui se trouve dans mon fichier .env:

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=MyPassword
137
Vantheman6

Je sais que cela fonctionne pour vous maintenant @ Vantheman6, mais c’est ce qui a fonctionné pour moi au cas où c’est la même chose pour quelqu'un d’autre. 

J'ai ajouté à mon fichier .env les détails du service de messagerie que j'utilise. Alors assurez-vous que les détails suivants

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=MyPassword

dans le fichier .env sont exacts.

NOTE: N'oubliez pas de redémarrer votre serveur après avoir édité le fichier .env pour qu'il sélectionne les nouvelles données que vous y avez entrées.

Si vous ne redémarrez pas votre serveur, le fichier .env continuera à présenter les anciennes données de messagerie à l'application, même si vous avez apporté des modifications pouvant entraîner cette erreur.

220

Ma configuration de fichier .env est comme ça pour laravel 5.1

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls

la chose la plus importante ici est que j’ai créé un mot de passe spécifique à l’application Gmail (16 chiffres).

J'ai besoin de révéler une chose de plus puisque aucune chance pour n'importe quelle configuration. C'est-à-dire que chaque fois que j'ai changé, le fichier .env doit exécuter cette commande

php artisan config:cache

Et ceci est très important car sans cette commande, laravel exécute les paramètres précédents à partir de son cache. Il m'a fallu plus de 10 heures pour comprendre.

44
Amir

Vous obtenez une erreur d'authentification car le nom d'utilisateur et le mot de passe de votre fichier de configuration sont mal configurés.

Change ça:

'username' => env('[email protected]'),
'password' => env('MyPassword'),

Pour ça:

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

La méthode env vérifie votre fichier .env. Dans votre fichier .env, vous appelez ces MAIL_USERNAME; c'est donc ce que vous devez passer à la méthode env.

Un conseil de dépannage: ajoutez dd(Config::get('mail')); pour que vous puissiez voir le réel généré config . Cela vous aidera à déceler des problèmes de ce type et à savoir exactement quelles informations Laravel va essayer d'utiliser. Donc, vous voudrez peut-être arrêter temporairement cela dans votre itinéraire de test pour examiner ce que vous avez:

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

le problème sera résolu en effaçant le cache 

php artisan config:cache
12
zainudin noori

À des fins de développement https://mailtrap.io/ vous fournit tous les paramètres à ajouter au fichier .env . Par exemple:

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

Sinon, à des fins d'implémentation, vous pouvez obtenir les informations d'identification smtp dans le fichier .env à partir du courrier (comme gmail et tous)

Après l’ajout, assurez-vous de redémarrer le serveur

9
Bhupesh Shrestha

Enfin j'ai eu! Juste pour partager, il y a plus de config que de simples .env

C'est .env

MAIL_DRIVER=smtp

MAIL_Host=smtp.gmail.com

MAIL_PORT=587

[email protected]

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config/mail.php doit également entrer l'adresse et le nom pour que cela fonctionne. 

'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,
9
yaksowmin

Si vous rencontrez le même problème et que vous essayez tout en ligne et que cela ne fonctionne pas, c'est probablement le fichier de cache de configuration qui envoie les informations erronées. Vous pouvez le trouver dans bootstrap/cache/config.php. Assurez-vous que les informations d'identification sont bien là. Cela m'a pris une semaine pour comprendre cela. J'espère que cela aidera quelqu'un un jour.

8
Nabil

Cela m'arrive aussi. 

C’est parce que lorsque nous modifions le fichier .env, nous devons redémarrer le serveur. Arrêtez simplement le php artisan serve actuel et redémarrez-le. Cela fonctionnera à coup sûr.

Si cela ne fonctionne toujours pas, essayez de faire php artisan config:cache

7
Advaith

Pour toute référence future aux personnes qui viennent ici. après avoir exécuté la commande donnée dans la troisième réponse ici (J'utilise maintenant Laravel 5.3).

php artisan config:cache

Vous pouvez rencontrer ce problème:

[ReflectionException]
Class view does not exist

Dans ce cas, vous devez le rajouter manuellement à la liste de vos fournisseurs, sous le fichier app.php. GO-TO: app->config->app.php->'providers[]' et ajoutez-le, comme suit: 

Illuminate\View\ViewServiceProvider::class,

J'espère que ça aide quelqu'un. 

4
GabMic

Cela signifie simplement que votre serveur n'a pas accès au serveur SMTP.

Vous pouvez tester cela en faisant:

telnet <smtpServer> <smtpPort>

Vous devriez obtenir l'erreur Accès refusé.

La solution consiste simplement à utiliser un autre serveur SMTP auquel votre serveur peut accéder.

2
stidiovip

Aucune des solutions ci-dessus n'a fonctionné pour moi sur localhost. J'ai même autorisé l'accès depuis des applications moins sécurisées, l'accès autorisé via l'affichage, déverrouiller captcha et paramétrer l'homologue de vérification et le nom d'homologue sur false pour SSL. 

Finalement, j'ai utilisé la solution de test SMTP open source de MailHog. Les étapes sont les suivantes: 

  1. Téléchargez la dernière version de MailHog pour votre système d'exploitation
  2. Spécifiez les paramètres suivants dans votre fichier .env

MAIL_DRIVER = smtp

MAIL_Host = 127.0.0.1 

MAIL_PORT = 1025 

MAIL_USERNAME = testuser 

MAIL_PASSWORD = testpwd 

MAIL_ENCRYPTION = null 

[email protected]

  1. Exécuter le fichier téléchargé de MailHog
  2. Envoyer un email
  3. Vérifiez les e-mails envoyés en allant à localhost: 8025
2
ZerosAndOnes

j'ai eu le même problème; mon 'MAIL_ENCRYPTION' était 'tls' sur mail.php mais il était 'nul' sur un fichier .env alors j'ai remplacé 'null' par 'tls' et cela a fonctionné!

2
mohaddese abbasi

Vous devez redémarrer le serveur et exécuter les commandes suivantes:

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

Cela devrait fonctionner.

1
Genius in trouble

Si vos résultats de dd(Config::get('mail')); sont nuls, utilisez simplement la commande 

php artisan config:clear
0
Mo D Genesis