Essayer de faire fonctionner l'e-mail Laravel 5

154

J'essaie d'envoyer un e-mail à un utilisateur spécifié en tapant l'URL, mais j'obtiens l'erreur suivante:

Swift_TransportException dans AbstractSmtpTransport.php ligne 383: Code de réponse attendu 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 faire fonctionner cela?

Voici ce que j'ai jusqu'à présent: 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 que contient mon fichier .env:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword
Vantheman6
la source
4
Utilisez mailtrap.io pour les tests
lancer
Belle astuce sur mailtrap.io @roll
Ben Everard
J'ai eu exactement la même erreur lors de l'utilisation de mailtrap.io
luisfer

Réponses:

243

Je sais que cela fonctionne pour vous maintenant @ Vantheman6 mais c'est ce qui a fonctionné pour moi au cas où ce serait 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. Assurez-vous donc que les détails suivants

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

dans le fichier .env sont exacts.

REMARQUE: n'oubliez pas de redémarrer votre serveur après avoir modifié le fichier .env afin qu'il sélectionne les nouvelles données que vous y mettez.

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 qui peuvent provoquer cette erreur.

Osei-Bonsu Christian
la source
59
Wow, cette «note» m'a sauvé. Je ne savais pas que les variables ENV étaient mises en cache au démarrage!
Gerben Jacobs
Pourriez-vous mettre à jour la réponse et mettre en évidence le serveur de redémarrage au lieu du fichier de configuration?
mrwaim
2
@mrwaim, je pensais que le redémarrage du serveur était exactement ce que j'avais spécifié dans la note, sauf si je ne comprends pas ce que vous sous-entendez.
Osei-Bonsu Christian
1
Je suggérerais de supprimer tout avant "Note:" - ce qui a aidé était la note, et pas les choses avant. Je suggère, si vous souhaitez conserver les autres parties, de les mettre après la note. 3 Les gens ont voté pour le commentaire 'Note' donc la note les a probablement aidés aussi.
mrwaim
22
Si vous avez précédemment mis en cache votre configuration avec php artisan config:cachele redémarrage du serveur ne récupérera pas la configuration mise à jour. Essayez à php artisan config:cachenouveau de courir
darronz
53

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

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

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

J'ai besoin de révéler une dernière chose car aucune chance pour aucune configuration. Autrement dit, chaque fois que j'ai changé le fichier .env, j'ai besoin d'exécuter cette commande

php artisan config:cache

Et c'est le plus 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.

Amir
la source
1
J'ai continué à utiliser php artisan cache:clearquand php artisan config:cacheest ce qui l'a résolu pour moi. Je vous remercie!
timgavin
4
voté en raison de votre note surphp artisan config:cache
darronz
35

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 envméthode vérifie votre fichier .env. Dans votre fichier .env, vous les appelez MAIL_USERNAME, c'est donc ce que vous devez transmettre à la envméthode.

Un conseil de dépannage: ajoutez dd(Config::get('mail'));afin que vous puissiez voir la configuration réelle générée . Cela vous aidera à repérer des problèmes comme celui-ci et à savoir exactement quelles informations Laravel va essayer d'utiliser. Vous voudrez peut-être arrêter cela temporairement dans votre itinéraire de test pour examiner ce que vous avez:

Route::get('test', function()
{
    dd(Config::get('mail'));
});
jszobody
la source
J'ai donc changé mon fichier mail.php pour refléter vos suggestions` 'username' => env ('MAIL_USERNAME'), `et que 'password' => env('MAIL_PASSWORD'), je trouve intéressant parce que partout me dit d'entrer votre adresse e-mail et votre mot de passe pour cela. J'obtiens toujours une erreur 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'));. le répertoire Config contient beaucoup de fichiers
Vantheman6
Voir ma réponse mise à jour, avec un exemple de la façon d'examiner votre configuration.
jszobody
c'est génial, je reçois toujours une erreur, mais je peux voir ce qu'il fait. Pour une raison quelconque, il essaie de passer `" host "=>" mailtrap.io "` à l'environnement même si dans le courrier php je dis'host' => env('MAIL_HOST', 'smtp.gmail.com'),
Vantheman6
Vérifiez le MAIL_HOSTdans votre fichier
.env
C'est exact. MAIL_HOST=smtp.gmail.com Donc, ce que j'ai fini par faire a été de supprimer tous les env de chaque partie du fichier mail.php. Et maintenant, les informations correctes passent. OMG Merci, cela a fonctionné. Vous êtes l'homme
Vantheman6
15

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

php artisan config:cache
zainudin noori
la source
13

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

C'est .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 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,
yaksowmin
la source
11

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

Nabil
la source
Vous, Monsieur, méritiez un joli Bordeaux, merci beaucoup! J'ai remarqué que le nom d'utilisateur et le mot de passe étaient vides dans ce fichier même si je les ai remplis dans les deux fichiers appropriés, à partir de là, je savais quoi faire! Merci!
Gregordy
MERCI! Sérieusement, je débogue depuis une heure sans aucun indice mais CECI !!! CECI
Ahmad Alfy
11

À des fins de développement, https://mailtrap.io/ vous fournit tous les paramètres qui doivent être ajoutés dans le 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 de mise en œuvre, vous pouvez obtenir les informations d'identification smtp à ajouter dans le fichier .env à partir du courrier (comme gmail n all)

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

Bhupesh Shrestha
la source
Après l'ajout, assurez-vous de redémarrer le serveur. Cette phrase a résolu mon problème.
Hos Mercury
8

Cela m'arrive aussi.

C'est parce que lorsque nous éditons le .envfichier, nous devons redémarrer le serveur. Arrêtez simplement le courant php artisan serveet redémarrez-le. Cela fonctionnera à coup sûr.

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

Advaith
la source
5

Pour référence future aux personnes qui viennent ici. après avoir exécuté la commande qui a été 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 à votre liste de fournisseurs sous le fichier app.php. GO-TO: app->config->app.php->'providers[]'et ajoutez-le, comme ceci:

Illuminate\View\ViewServiceProvider::class,

J'espère que cela aide quelqu'un.

GabMic
la source
4

J'ai eu le même problème; mon MAIL_ENCRYPTIONétait tlssur mail.phpmais c'était dans nullle .envdossier.
Donc , je l' ai changé nullpour tlset cela a fonctionné!

abbasi mohaddese
la source
C'était le cas!
夏 期 劇場
3

Aucune des solutions ci-dessus n'a fonctionné pour moi sur localhost. J'ai même autorisé l'accès à partir d'applications moins sécurisées, autorisé l'accès via le captcha de déverrouillage de l'écran et défini le pair de vérification et le nom du pair de vérification 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écutez le fichier téléchargé de MailHog
  2. Envoyer un e-mail
  3. Vérifiez l'e-mail envoyé en vous rendant sur localhost: 8025
Zéros et onnes
la source
3

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 accessible par votre serveur.

stidiovip
la source
2

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

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

Cela devrait fonctionner.

Génie en difficulté
la source
0

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

php artisan config:clear
Mo D Genèse
la source
0

Mon opinion après avoir apporté des modifications à vos fichiers .env, redémarrez votre serveur et servez à nouveau l'application. Juste pour être sûr de l'erreur réelle. L'artisan php d'effacement et de cache fonctionne ensuite très bien.

Alemoh Rapheal Baja
la source
-1

J'ai eu le même problème que toi, je viens de le faire fonctionner.

Tout d'abord, vous devez vérifier que les paramètres .env sont correctement configurés. Voici mes paramètres:

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

Veuillez vous assurer que votre mot de passe n'est pas entre guillemets :).

Et dans config / mail.php, il contient les éléments suivants, sans les commentaires.

<?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,

];

J'espère que ça marche pour toi :)

Yazeed AlSaif
la source
-1

Dans mon cas: redémarrez le serveur et exécutez la php artisan config:clearcommande.

Duy Nguyen
la source
-2
  1. Vous allez au Mailgun
  2. Cliquez sur Destinataires autorisés
  3. Ajoutez l'adresse e-mail à laquelle vous souhaitez envoyer un e-mail.
  4. Vérifiez le message envoyé au courrier.
  5. Bravo! ... Vous êtes prêt à partir.
user7141795
la source
2
Veuillez pardonner mon ignorance. Comment la réponse ci-dessus résout-elle les problèmes de courrier électronique Laravel5 dans la question?
jww