问题
I am using Laravel Mail function to send email. The following is my app/config/mail.php
file settings.
\'driver\' => \'sendmail\',
\'host\' => \'smtp.gmail.com\',
\'port\' => 587,
\'from\' => array(\'address\' => \'email@gmail.com\', \'name\' => \'MyName\'),
\'encryption\' => \'tls\',
\'username\' => \'myUsername\',
\'password\' => \"password\",
\'sendmail\' => \'/usr/sbin/sendmail -bs\',
\'pretend\' => false,
Controller Mail Method
//Send Mail
Mail::send(\'sendMail\', array(\'key\' => \'value\'), function($message)
{
$message->to(\'EmailId@hotmail.com\', \'Sender Name\')->subject(\'Welcome!\');
});
When I run the code it gives me following error message:
Swift_TransportException
Expected response code 220 but got code \"\", with message \"\"
I have created a SendMail.php
file in view which contains some data.
How do I resolve this error message?
回答1:
This problem can generally occur when you do not enable two step verification for the gmail
account (which can be done here) you are using to send an email
. So first, enable two step verification
, you can find plenty of resources for enabling two step verification. After you enable it, then you have to create an app password
. And use the app password
in your .env
file. When you are done with it, your .env
file will look something like.
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<<your email address>>
MAIL_PASSWORD=<<app password>>
MAIL_ENCRYPTION=tls
and your 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,
];
After doing so, run php artisan config:cache
and php artisan config:clear
, then check, email should work.
回答2:
In my case I had to set the
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)
to work it.. Might be useful. Rest of the code was same as @Sid said.
And I think that editing both environment file and app/config/mail.php is unnecessary. Just use one method.
Edit as per the comment by @Zan
If you need to enable tls protection use following settings.
MAIL_PORT=587
MAIL_ENCRYPTION= tls
See here for some other gmail settings
回答3:
What helped me... changing sendmail parameters from -bs to -t.
'sendmail' => '/your/sendmail/path -t',
回答4:
if you are using Swift Mailer: please ensure that your $transport variable is similar to the below, based on tests i have done, that error results from ssl and port misconfiguration. note: you must include 'ssl' or 'tls' in the transport variable.
EXAMPLE CODE:
// Create the Transport
$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
->setUsername(you@example.com)
->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(['app@example.com' => 'A Name'])
->setTo(['someone@example.com' => 'A Name'])
->setBody('your message body')
;
// Send the message
$result = $mailer->send($message);
回答5:
For me the problem was the port. I first incorrectly used port 465, which works for SSL
but not TLS
. So the key thing was changing the port to 587.
回答6:
I did as per sid saying my env after updating is
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<mygmailaddress>
MAIL_PASSWORD=<gmailpassword>
MAIL_ENCRYPTION=tls
this did work without 2 step verification. with 2 step verification enabled it did not work for me.
回答7:
That error message means that there was not response OR the server could not be connected.
The following settings worked on my end:
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
Note that my SMTP settings are:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=[full gmail address]
MAIL_PASSWORD=[App Password obtained after two step verification]
MAIL_ENCRYPTION=ssl
来源:https://stackoverflow.com/questions/32693528/expected-response-code-220-but-got-code-with-message-in-laravel