Trying to get Laravel 5 email to work
PhpLaravelLaravel 5EmailPhp Problem Overview
I'm trying to send an email to a specified user by typing in the URL, but I'm getting the following error:
> Swift_TransportException in AbstractSmtpTransport.php line 383: > Expected response code 250 but got code "530", with message "530 5.7.1 > Authentication required
So far I'm just trying to get it to work with Gmail. How can I get this to work?
This is what I have so far: 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,
];
This is what I have in the routes:
Route::get('test', function() {
Mail::send('Email.test', [], function ($message) {
$message->to('example@gmail.com', 'HisName')->subject('Welcome!');
});
});
This is what I have in my controller:
class MailController extends Controller
{
public function Sending_Email()
{
$this->call('GET','Email.test');
return View('Email.test');
}
}
And this is what is in my .env file:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME[email protected]
MAIL_PASSWORD=MyPassword
Php Solutions
Solution 1 - Php
I know it's working for you now @Vantheman6 but this is what worked for me in case it's the same for someone else.
I added to my .env file the details of the mail service I am using. So make sure the following details
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME[email protected]
MAIL_PASSWORD=MyPassword
in the .env file are accurate.
NOTE: Don't forget to restart your server after editing the .env file so it will pick the new data that you put in there.
Clear config cache with below command:
php artisan config:cache
If you don't restart your server, the .env file will still continue to present the old mail data to the app even though you have made changes that can cause this error.
Solution 2 - Php
My .env file configuration is like this for laravel 5.1
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME[email protected]
MAIL_PASSWORD=****************
MAIL_ENCRYPTION=tls
here most important thing is that I created gmail application specific password(16 digit).
I need to reveal one more thing since no luck for any of configuration. That is, whenever I changed .env file need to run this command
php artisan config:cache
And this is most most most important because without this command laravel executes previous settings from it's cache. It's required me more than 10 hours to figure out.
Solution 3 - Php
You are getting an authentication error because the username and password in your config file is setup wrong.
Change this:
'username' => env('[email protected]'),
'password' => env('MyPassword'),
To this:
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
The env
method checks your .env file. In your .env file you call these MAIL_USERNAME
, so that's what you need to pass to the env
method.
One troubleshooting tip: add dd(Config::get('mail'));
so that you can see the actual generated config. This will help you spot issues like this, and know exactly what information Laravel is going to try and use. So you may want to stop that in your test route temporarily to examine what you have:
Route::get('test', function()
{
dd(Config::get('mail'));
});
Solution 4 - Php
the problem will be solved by clearing cache
php artisan config:cache
Solution 5 - Php
Finally I got! Just to share, there are more config than just .env
This is .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME[email protected]
MAIL_PASSWORD=********
MAIL_ENCRYPTION=tls
config/mail.php also need to input address & name for it to work.
'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,
Solution 6 - Php
If you ever have the same trouble and try everything online and it doesn't work, it is probably the config cache file that is sending the wrong information. You can find it in bootstrap/cache/config.php. Make sure the credentials are right in there. It took me a week to figure that out. I hope this will help someone someday.
Solution 7 - Php
For development purpose https://mailtrap.io/ provides you with all the settings that needs to be added in .env file. Eg:
Host: mailtrap.io
Port: 25 or 465 or 2525
Username: cb1d1475bc6cce
Password: 7a330479c15f99
Auth: PLAIN, LOGIN and CRAM-MD5
TLS: Optional
Otherwise for implementation purpose you can get the smtp credentials to be added in .env file from the mail (like gmail n all)
After addition make sure to restart the server
Solution 8 - Php
It happens to me also.
> It is because when we edit the .env
file we need to restart the server. Just stop the current php artisan serve
and start it once again. This will work for sure.
If still not worked try doing php artisan config:cache
Solution 9 - Php
For future reference to people who come here. after you run the command that was given in the third answer here(I am using now Laravel 5.3).
php artisan config:cache
You may encounter this problem:
[ReflectionException]
Class view does not exist
In that case, you need to add it back manually to your provider list under the app.php file. GO-TO:
app->config->app.php->'providers[]'
and add it, like so:
Illuminate\View\ViewServiceProvider::class,
Hope That helps someone.
Solution 10 - Php
I've had the same problem; my MAIL_ENCRYPTION
was tls
on mail.php
but it was null
on .env
file.
So I changed null
to tls
and it worked!
Solution 11 - Php
That simply means that your server does not have access to the SMTP Server.
You can test this by doing:
telnet <smtpServer> <smtpPort>
You should get the Access denied error.
The solution is to just use another SMTP server that can be accessed by your server.
Solution 12 - Php
None of the above solutions worked for me on localhost. I even allowed access from less secure apps, allowed access through display unlock captcha and set the verify peer and verify peer name to false for SSL.
Eventually, I used the open source SMTP testing solution of MailHog. The steps are as follows:
-
Specify the following settings in your .env file
> MAIL_DRIVER=smtp
> MAIL_HOST=127.0.0.1
> MAIL_PORT=1025
> MAIL_USERNAME=testuser
> MAIL_PASSWORD=testpwd
> MAIL_ENCRYPTION=null
> MAIL_FROM_ADDRESS=[email protected]
- Run the downloaded file of MailHog
- Send Email
- Check sent email by going to localhost:8025
Solution 13 - Php
You should restart the server and run this commands:
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
php artisan config:cache
That should work.
Solution 14 - Php
If your results from dd(Config::get('mail'));
are null simply use the command
php artisan config:clear
Solution 15 - Php
My opinion after making changes on your .env files restart your server and serve the app again. Just to be sure of the actual error. The php artisan clear and cache afterwards works pretty fine.
Solution 16 - Php
For my case the issue was that the email that I was using from('[email protected]') differed from the one I had configured in the .env file as the MAIL_USERNAME.
Below is a snippet of the mail configuration in the .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME[email protected]
MAIL_PASSWORD=strongpassword
MAIL_ENCRYPTION=tls
in the mail sending method, I had set
->from('mymail@gmail.com')->to('myfriend@gmail.com');
Always ensure that the mail used in the
> ->from('mymail@gmail')
is the same as the one configured in the .env MAIL_USERNAME
.
After modifying your .env
ensure to restart your server
in the event you are using laravel 7 and below as they do not have automatic restart when the .env file is modified.
If you have done all of the above and have not yet solved try to run these below commands to clear any cached configuration from your system :
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
Solution 17 - Php
I had the same problem as you, I just got it to work.
Firstly, you need to double check that the .env settings are set up correctly. Here are my settings:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=yourusername
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=tls
Please make sure that your password is not between quotes :).
And in config/mail.php it has the following, without the comments.
<?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,
];
Hope it works for you :)
Solution 18 - Php
In my case:
Restart the server and run php artisan config:clear
command.
Solution 19 - Php
- You go to the Mailgun
- Click Authorized Recipients
- Add the email address you wish send mail to.
- Verify the message sent to the mail.
- Bravo!...You're good to go.