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?
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.
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
Ce qui m'a aidé ... changer les paramètres de sendmail de -bs à -t.
'sendmail' => '/your/sendmail/path -t',
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.
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);
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.