Laravel mail with g suites and XOAUTH2


Laravel mail with g suites and XOAUTH2
I have a g suites account and applications associated with my e-mails. I was looking at the Laravel mail functions but I do not see any option to log in to gmail smtp with xoauth auth type.
I was using PHPMailer with codeigniter and I had to use clientId, clientSecret and refreshToken to send emails via smtp.gmail.com
Is there any chance I can authenticate using xoauth with native laravel swiftmailer?
Hi, I have g suites account at google. Which allows me to use gmail for my domain. And I want to send email via that gmail account but I can do it only by phpmailer with oauth access ( github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2 )
– DeiForm
Jul 24 at 10:15
have you configure .env file ? according to your gmail. And how do u want to do it like you said
but I can do it only by phpmailer with oauth access
– Sagar Ahuja
Jul 24 at 10:56
but I can do it only by phpmailer with oauth access
i need to know so i can help you
– Sagar Ahuja
Jul 25 at 6:15
Laravel does not have any option to configure oauth access.
– DeiForm
Jul 25 at 9:59
1 Answer
1
Since Laravel doesn't have available configuration to set AuthMode then we need to tweak it a little bit.
Register a new Mail service provider in config/app.php
:
config/app.php
// ...
'providers' => [
// ...
// IlluminateMailMailServiceProvider::class,
AppMyMailerMyMailServiceProvider::class,
// ...
app/MyMailer/MyMailServiceProvider.php
should create your own TransportManager
class:
app/MyMailer/MyMailServiceProvider.php
TransportManager
```
namespace AppMyMailer;
class MyMailServiceProvider extends IlluminateMailMailServiceProvider
public function registerSwiftTransport()
$this->app['swift.transport'] = $this->app->share(function ($app)
return new MyTransportManager($app);
);
```
app/MyMailer/MyTransportManager.php
SwiftMailer
```
<?php
namespace AppMyMailer;
class MyTransportManager extends IlluminateMailTransportManager
/**
* Create an instance of the SMTP Swift Transport driver.
*
* @return Swift_SmtpTransport
*/
protected function createSmtpDriver()
$transport = parent::createSmtpDriver();
$config = $this->app->make('config')->get('mail');
if (isset($config['authmode']))
$transport->setAuthMode($config['authmode']);
return $transport;
```
authmode
XOAUTH2
password
```
<?php
return array(
/*
|--------------------------------------------------------------------------
| 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"
|
*/
'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 Postmark mail service, which will provide reliable delivery.
|
*/
'host' => 'smtp.gmail.com',
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to delivery e-mails to
| users of your application. Like the host we have set this value to
| stay compatible with the Postmark e-mail application by default.
|
*/
'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' => array('address' => 'user@gmail.com', 'name' => 'user'),
/*
|--------------------------------------------------------------------------
| 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' => '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' => 'user@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' => 'YOUR ACCESS TOKEN',
/*
|--------------------------------------------------------------------------
| 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,
'authmode' => 'XOAUTH2',
);
```
I am getting this error: SymfonyComponentDebugExceptionFatalThrowableError : Call to undefined method IlluminateFoundationApplication::share()
– DeiForm
yesterday
As of laravel 5.4 share has been removed. You will have to use the singleton instead. See: github.com/laravel/framework/commit/…
– DeiForm
yesterday
I made it work but now getting this :Expected response code 250 but got code "535", with message "535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 support.google.com/mail/?p=BadCredentials t66-v6sm2479077lje.95 - gsmtp
– DeiForm
yesterday
btw I have refresh token not access token
– DeiForm
yesterday
and even if I get access token it may expire how do I cahnge it then inconfig? Can you help me out a bit more ? Thanks
– DeiForm
yesterday
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
i think the question is bit complex just to get an idea you want to send mail with making authencation i didnt understand that
– Sagar Ahuja
Jul 24 at 9:40