Trying to get Laravel 5 email to work

PhpLaravelLaravel 5Email

Php 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:

  1. Download the latest version of MailHog for your OS

  2. 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]

  1. Run the downloaded file of MailHog
  2. Send Email
  3. 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

  1. You go to the Mailgun
  2. Click Authorized Recipients
  3. Add the email address you wish send mail to.
  4. Verify the message sent to the mail.
  5. Bravo!...You're good to go.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVantheman6View Question on Stackoverflow
Solution 1 - PhpOsei-Bonsu ChristianView Answer on Stackoverflow
Solution 2 - PhpAmirView Answer on Stackoverflow
Solution 3 - PhpjszobodyView Answer on Stackoverflow
Solution 4 - Phpzainudin nooriView Answer on Stackoverflow
Solution 5 - PhpyaksowminView Answer on Stackoverflow
Solution 6 - PhpNabilView Answer on Stackoverflow
Solution 7 - PhpBhupesh ShresthaView Answer on Stackoverflow
Solution 8 - PhpAdvaithView Answer on Stackoverflow
Solution 9 - PhpGabMicView Answer on Stackoverflow
Solution 10 - Phpmohaddese abbasiView Answer on Stackoverflow
Solution 11 - PhpstidiovipView Answer on Stackoverflow
Solution 12 - PhpZerosAndOnesView Answer on Stackoverflow
Solution 13 - PhpGenius in troubleView Answer on Stackoverflow
Solution 14 - PhpMo D GenesisView Answer on Stackoverflow
Solution 15 - PhpAlemoh Rapheal BajaView Answer on Stackoverflow
Solution 16 - Phpstanley mboteView Answer on Stackoverflow
Solution 17 - PhpYazeed AlSaifView Answer on Stackoverflow
Solution 18 - PhpDuy NguyenView Answer on Stackoverflow
Solution 19 - Phpuser7141795View Answer on Stackoverflow