web-dev-qa-db-fra.com

Réponse attendue code 220 mais code obtenu "", avec le message "" dans Laravel

J'utilise la fonction Laravel Mail pour envoyer un courrier électronique. Voici les paramètres de mon fichier app/config/mail.php.

'driver' => 'sendmail',
'Host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => '[email protected]', 'name' => 'MyName'),
'encryption' => 'tls',
'username' => 'myUsername',
'password' => "password",
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

Méthode de messagerie du contrôleur

//Send Mail     
Mail::send('sendMail', array('key' => 'value'), function($message)
{
    $message->to('[email protected]', 'Sender Name')->subject('Welcome!');
});

Lorsque je lance le code, le message d'erreur suivant s'affiche:

Swift_TransportException

Réponse attendue code 220 mais code obtenu "", avec le message ""

J'ai créé un fichier SendMail.php dans la vue qui contient des données.

Comment résoudre ce message d'erreur?

43
Kirmani88

Ce problème peut généralement se produire lorsque vous n'activez pas la vérification en deux étapes pour le compte gmail (ce qui peut être fait ici ) vous utilisez pour envoyer une email. Donc, premièrement, activez two step verification, vous pouvez trouver de nombreuses ressources pour activer la vérification en deux étapes. Après l'avoir activé, vous devez créer un app password. Et utilisez le app password dans votre fichier .env. Quand vous en aurez fini, votre fichier .env ressemblera à quelque chose.

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls

et votre mail.php

<?php

return [
    'driver' => env('MAIL_DRIVER', 'smtp'),
    'Host' => env('MAIL_Host', 'smtp.gmail.com'),
    'port' => env('MAIL_PORT', 587),
    'from' => ['address' => '<<your email>>', 'name' => '<<any name>>'],
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    'username' => env('MAIL_USERNAME'),
    'password' => env('MAIL_PASSWORD'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,

];

Après cela, lancez php artisan config:cache et php artisan config:clear, puis vérifiez que le courrier électronique devrait fonctionner.

71
Sid

Dans mon cas, je devais régler le 

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=465           <<<<<<<------------------------- (FOCUS THIS)
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>

MAIL_ENCRYPTION= ssl    <<<<<<<------------------------- (FOCUS THIS)

pour le travailler .. Cela pourrait être utile ... Le reste du code était identique à celui indiqué par @Sid.

Et je pense que la modification du fichier d’environnement et de app/config/mail.php n’est pas nécessaire. Utilisez juste une méthode.

Éditer selon le commentaire de @Zan

Si vous devez activer la protection tls, utilisez les paramètres suivants.

MAIL_PORT=587
MAIL_ENCRYPTION= tls  

Voir ici pour d’autres paramètres de Gmail 

13
Gayan Kavirathne

Ce qui m'a aidé ... changer les paramètres de sendmail de -bs à -t.

'sendmail' => '/your/sendmail/path -t',
1
smoothie

Pour moi le problème était le port. J'ai d'abord utilisé le port 465 de manière incorrecte, qui fonctionne pour SSL mais pas TLS. L’important était donc de changer le port en 587.

1
Jan Żankowski

si vous utilisez Swift Mailer: assurez-vous que votre variable $ transport est similaire à celle ci-dessous, d'après les tests que j'ai effectués, que l'erreur résulte d'une mauvaise configuration de ssl et de port .remarque: vous devez inclure 'ssl' ou 'tls' dans la variable de transport.

CODE EXEMPLE:

// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
  ->setUsername([email protected])
  ->setPassword(password)
;

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

// Create a message
$message = (new Swift_Message('News Letter Subscription'))
  ->setFrom(['[email protected]' => 'A Name'])
  ->setTo(['[email protected]' => 'A Name'])
  ->setBody('your message body')
  ;

// Send the message
$result = $mailer->send($message);
0
Chavez Harris

J'ai fait comme indiqué en disant mon env après mise à jour est 

MAIL_DRIVER=smtp
MAIL_Host=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<mygmailaddress>
MAIL_PASSWORD=<gmailpassword>
MAIL_ENCRYPTION=tls

cela a fonctionné sans vérification en 2 étapes. avec vérification en 2 étapes activée, cela ne fonctionnait pas pour moi.

0
Sunil Kumar