0

I want to send mail using Gmail from my laravel project.

I am using all required details of gmail account into project env file but i am getting this error.

Error : Swift_TransportException in StreamBuffer.php line 268:
Connection could not be established with host smtp.gmail.com [Connection refused #111]

When i am sending mails from my local i mean using driver "sendmail" mails are working fine but my requirment is i want to send mails from smtp.

Below is code you can see what i am using.

Mail.php

    return [
    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill",
    |            "ses", "sparkpost", "log"
    |
    */
    'driver' => env('MAIL_DRIVER', 'smtp'),
    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */
    'port' => env('MAIL_PORT', 587),
    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */
    'from' => [ 'address' => null , 'name' => null ],
    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */
    'username' => env('MAIL_USERNAME'),
    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */
    'password' => env('MAIL_PASSWORD'),
    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */
    'sendmail' => '/usr/sbin/sendmail -bs',

    /*
    |--------------------------------------------------------------------------
    | Mail "Pretend"
    |--------------------------------------------------------------------------
    |
    | When this option is enabled, e-mail will not actually be sent over the
    | web and will instead be written to your application's logs files so
    | you may inspect the message. This is great for local development.
    |
    */

    'pretend' => false,
];

.env file configration

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=mygmail
MAIL_PASSWORD=mygmailpassword
MAIL_ENCRYPTION=tls

Please let me know where i am doing wrong.

From Google account settings are properly configure.

1) DisplayUnlockCaptcha => Enabled

2) Security Connected Apps => Enabled

3) IMAP Access => Enabled

All settings are enable for sending mail from account.

  • Can you try to do a "telnet smtp.gmail.com 587" on the server where your app is hosted? If it cannot connect then you may be in a network where oubounds to port 587 is blocked. – aljo f May 24 '17 at 07:34
  • How can i check this "telnet smtp.gmail.com 587". this is error while i am changing to telnet driver. Error : Driver [telnet] not supported. – Durga Parshad May 24 '17 at 07:38
  • You do it in the command line. Or use any utility that can check if you can connect to a hostname:port. This is just to verify that this isn't a network problem. – aljo f May 24 '17 at 07:39
  • You mean ssh access for my account right. – Durga Parshad May 24 '17 at 07:40
  • If that's where your Laravel application is, then yes. – aljo f May 24 '17 at 07:42
  • Application is hosted on godday server which is using ultimate linux hosting package. And i am able to access my ssh account. – Durga Parshad May 24 '17 at 07:48
  • I mean try to do that at the command line (inside your SSH account). Or, you can godaddy support about it. – aljo f May 24 '17 at 07:58
  • I don't want to send mails from server (local). I want to use gmail smtp for sending mail. – Durga Parshad May 24 '17 at 08:15
  • What I mean is, log into your SSH account at godaddy (where your Laravel app is). Do the port connection test there. If port connection test fails then you'll know it's not your laravel app that's having the problem. – aljo f May 24 '17 at 08:20

2 Answers2

0

On my own laravel installation i've got a working smtp mail function so let me strip down the code that is required to set this up correctly, feel free to copy and paste the code. Do remember to change the account variables.

mail.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Mail Driver
    |--------------------------------------------------------------------------
    |
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the
    | sending of e-mail. You may specify which one you're using throughout
    | your application here. By default, Laravel is setup for SMTP mail.
    |
    | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill",
    |            "ses", "sparkpost", "log"
    |
    */

    'driver' => env('MAIL_DRIVER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Address
    |--------------------------------------------------------------------------
    |
    | Here you may provide the host address of the SMTP server used by your
    | applications. A default option is provided that is compatible with
    | the Mailgun mail service which will provide reliable deliveries.
    |
    */

    'host' => env('MAIL_HOST', 'smtp.gmail.com'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Host Port
    |--------------------------------------------------------------------------
    |
    | This is the SMTP port used by your application to deliver e-mails to
    | users of the application. Like the host we have set this value to
    | stay compatible with the Mailgun e-mail application by default.
    |
    */

    'port' => env('MAIL_PORT', 587),

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'easywebs.info@gmail.com'),
        'name' => env('MAIL_FROM_NAME', 'Create your own header name'),
    ],

    /*
    |--------------------------------------------------------------------------
    | E-Mail Encryption Protocol
    |--------------------------------------------------------------------------
    |
    | Here you may specify the encryption protocol that should be used when
    | the application send e-mail messages. A sensible default using the
    | transport layer security protocol should provide great security.
    |
    */

    'encryption' => env('MAIL_ENCRYPTION', 'tls'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Username
    |--------------------------------------------------------------------------
    |
    | If your SMTP server requires a username for authentication, you should
    | set it here. This will get used to authenticate with your server on
    | connection. You may also set the "password" value below this one.
    |
    */

    'username' => env('MAIL_USERNAME', 'example@gmail.com'),

    /*
    |--------------------------------------------------------------------------
    | SMTP Server Password
    |--------------------------------------------------------------------------
    |
    | Here you may set the password required by your SMTP server to send out
    | messages from your application. This will be given to the server on
    | connection so that the application will be able to send messages.
    |
    */

    'password' => env('MAIL_PASSWORD', 'example123'),

    /*
    |--------------------------------------------------------------------------
    | Sendmail System Path
    |--------------------------------------------------------------------------
    |
    | When using the "sendmail" driver to send e-mails, we will need to know
    | the path to where Sendmail lives on this server. A default path has
    | been provided here, which will work well on most of your systems.
    |
    */

    'sendmail' => '/usr/sbin/sendmail -bs',

    'pretend' => false
];

.env file

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=example123
MAIL_ENCRYPTION=tls

Function example that sends data to an email address of your choise

Mail::send('emails.contact/* View that creates the email layout */', $contact,
            function ($form) use ($contact)
            {
                //email 'From' field: Get users email address and name
                $form->from($contact['email'], $contact['name']);
                //email 'To' field: Email to > address.
                $form->to('example.@gmail.com', 'example info')->subject('example');
            });

Hope this helps!

Deathstorm
  • 818
  • 11
  • 36
  • I am using same code you can check above code which similar to your code. if any issue in my code please let know where it is so i can able to fix it. – Durga Parshad May 24 '17 at 08:21
  • I see that you are using `smtp.mailgun.org` as a host? @DurgaParshad – Deathstorm May 24 '17 at 08:33
  • 1
    you can see there env declaration is replacing that to the smtp.gmail.com. And also i try to change according to you but again same error occurs. – Durga Parshad May 24 '17 at 08:50
  • yes i did i just wanted to know if you were aware of that information. Since you've changed your `.env` file did you run `php artisan config:cache`? @DurgaParshad – Deathstorm May 24 '17 at 08:55
  • Yes i run this command every time when i changed any thing with my env – Durga Parshad May 24 '17 at 09:52
  • @DurgaParshad take a look at [this](https://stackoverflow.com/questions/32515245/how-to-to-send-mail-using-gmail-in-laravel-5-1), the first answer should help maybe, secondly i would advice changing your `mail.php` hostname to `smtp.gmail.com` – Deathstorm May 24 '17 at 09:55
0

With security conected apps disabled I get this work. Try it Enter to google account and disable it