dacastro4 / laravel-gmail Goto Github PK
View Code? Open in Web Editor NEWLaravel wrapper for the Gmail API
License: MIT License
Laravel wrapper for the Gmail API
License: MIT License
Hi,
How do I set state variable on client.
Another issue here, when i try to get all messages.
Call to undefined method Dacastro4\LaravelGmail\LaravelGmailClass::messages()
LaravelGmail::messages()->unread()->all();
Change to
LaravelGmail::message()->unread()->all();
Using this package I am able to do What I want but while fetching gmail messages it takes lot of time to get those emails so I found out that we get message id and then using this id we have to get particular message. The reason I understood is we are making multiple call for every email and thats the reason getting emails takes lot of time. Now how do I do it using Batch Request ?
I am getting the following error after following your installation steps. I have entries in the app.php in the config directory for both class and alias and I have published it as well.
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Class 'Dacastro4\LaravelGmail' not found
Also see teh following:
Symfony\Component\Debug\Exception\FatalThrowableError
โฆ/app/Http/Controllers/GmailController.php15
Controller code
For future reference, defaults to storage/app/gmail/tokens
Originally posted by @rsmith87 in #13 (comment)
Hey @dacastro4 .
How can I get email id after send email
$mail =new Mail()->to($data['to'])->from('[email protected]')->subject($subject)->message($texteditor)->send();
$mail->getId() return null
https://www.screencast.com/t/NqH6xpZC
Hi,
How do I send emails with the views like we do using Laravel Mail Facades .
Also I am unable to figure out the how to set a user. For example I have multiple users signup with their Gmail to send mail from. I have saved the access_token and refresh_token , how do I set a user while sending emails, so the email will go from that user.
Thanks,
I am getting "No credentials found." auth exception on "LaravelGmail::message()->unread()->all()" after login(LaravelGmail::redirect()).
Love how you structured all of this. This has definitely saved me a ton of setup time to work with gmail api.
But as you said, it's a work in progress.
For my use case, the current filters aren't adequate enough to limit my query.
Currently this returns 100 messages and it takes a long time if I want to loop through them.
$messages = LaravelGmail::message()->from('[email protected]')->all();
if I do this, it takes like 1 second:
$messages = LaravelGmail::message()->from('[email protected]')->all();
dump($messages);
this times out...
$messages = LaravelGmail::message()->from('[email protected]')->preload()->all();
dump($messages);
doing this takes 17 seconds.....
$messages = LaravelGmail::message()->from('[email protected]')->all();
$count = 0;
foreach ($messages as $message)
{
// $body = $message->getHtmlBody();
$subject = $message->load()->getSubject();
dump($subject);
// dump($body);
if ($count > 5)
break;
else
$count++;
}
What if we could do this?
$messages = LaravelGmail::message()->from('[email protected]')->preload()->take(5);
The goal being to increase performance?
Or am I missing something really obvious? Like some date filters...
Hi,
I want to configure your LaravelGmail, but I have this message on my Laravel 5.4.36 : "Class laravelgmail does not exist"
I use PHP 7.1 and your LaravelGmail in 0.4 and 0.6, the problem is the same.
I have been in my config/app.php :
Dacastro4\LaravelGmail\LaravelGmailServiceProvider::class,
(provider)
'LaravelGmail' => Dacastro4\LaravelGmail\Facade\LaravelGmail::class,
(aliases)
What is the problem ?
First, congrats for you class!
I get an error "Invalid token format". I put the credentials json into storage/app/gmail/tokens/gmail-json.json with this format:
{ "installed": { "client_id": "xxxxx", "project_id": "xxxxx", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://www.googleapis.com/oauth2/v3/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_secret": "xxxxxx", "redirect_uris": [ "urn:ietf:wg:oauth:2.0:oob", "http://localhost" ] } }
Is possible to use this package with user service account credentials file?
Thanks in advance.
Regards.
Sergio
I am getting the messages, but it is pulling the oldest emails first. Is there a way to pull the latest emails first?
Here is my code
public function inbox(){
$messages = LaravelGmail::message()->unread()->preload()->all();
foreach ( $messages as $message ) {
$subject = $message->getSubject();
$body = $message->getPlainTextBody();
$fromname= $message->getFromName();
$fromemail= $message->getFromEmail();
$mail =$message ->markAsRead();
$mail=$message ->reply('recieved')->send();
I get an error
"invalidArgument", "message": "Recipient address required" } ], "code": 400, "message": "Recipient address required" } }
I think aliases is wrong ๐
'aliases' => [
'Twitter' => Dacastro4\LaravelGmail\Facades\LaravelGmail::class,
]
I have tried setting GOOGLE_ALLOW_MULTITPLE_CREDENTIALS=true
in the env file (and refreshing config cache) as well as hardcoding 'allow_multiple_credentials' => true
in config/gmail.php.
But when I login as a User A in one browser, then log in as User B in a different browser, I can only see the data for User A. If I take a look at storage/app/gmail/tokens/
there's only one gmail-json file and when I open it, only the details for User A are in there.
I'm sure I'm missing something obvious here, but hoping someone can help!
I kept getting this error.
Class 'Dacastro4\LaravelGmail\Facades\LaravelGmail' not found
I have tried everything clearing cache, reinstalling both v0.4.1 and v0.4
I am running Laravel v5.4 and followed the installation. I added both provider and the fascade.
Please help, thanks!
Hi,
I want that the connection to GMAIL at the email address (example : [email protected]) to be automatic without the user having to login ?
This email address is a common address and we have more users of the application who reply at a mail.
In fact, I want to create a ticketing application connected at GMAIL. Your program help me to receive any messages in the lavaral application.
Is it possible ?
Thanks you :)
I am trying to test this code on my controller
$messages = LaravelGmail::message()->all( $pageToken = null );
var_dump($messages);
but i get this message
Dacastro4\LaravelGmail\Services\Message and Dacastro4\LaravelGmail\Traits\SendsParameters define the same property ($params) in the composition of Dacastro4\LaravelGmail\Services\Message. However, the definition differs and is considered incompatible. Class was composed
Page token is missing when using limit data.
LaravelGmail::message()->limit(10)->in( $box = 'inbox' )->preload()->all();
How can i access pagetoken.
Hi, there is such a issue.
How to return getSubject() without using preload(), load() ? (loading takes a very looong time with them)
For ex:
Return: $message = LaravelGmail::message()->take(100)->in('inbox')->all();
How to use {{ $message->getSubject() }} Or how to return getheaders() in the main query?
Hey, how are you?
Is there a way to filter the e-mails by date like gmail allows you to? (after:, before:, older_than:, etc.).
I had a quick look at your code and I didn't saw it.
$mail = new Mail();
$mail->to($data['to'])->from('us****@piecyfer.com')->subject('text')->message('this is trhe testing email')->send();
when i use to this code i wall received this kindly guide me about how to send email ;
Call to undefined method Illuminate\Support\Facades\Mail::to() (View: C:\xampp\htdocs\mygoogleapi\resources\views\welcome.blade.php)
I found great use of your package however the function getBodyPart() in the file Services/Messages/mail.php line 350 has the option to return null to a function which later calls getBody() on the returned value. And if you call getBody on null it throws a fatal error.
I found that only messages from icloud causes this problem since gmail's own library sets the body (plaintext) in the payload object rather than in a part.
As you can see in the images below, one email object does not have parts, it was recieved from an icloud account and the second from a gmail account, however i have tried with yahoo, hotmail and privately hosted mail servers aswell, and those work.
A suggestion is to do a check first to see if the payload has parts to begin with, and if not extract the data from the payload body itself.
Thanks again for the awesome package. I'm having troubles sending an email because I don't know what I should be instantiating it with. Current code (that doesn't work):
$mail = LaravelGmail::message()->to($data['to'])->from('[email protected]')->subject($subject)->message($texteditor)->send();
I don't think this is it.. Haha.
Would you have any objections to having some helpers to tie it to an existing email in App\User ? I have some updated code that's working for me and I don't mind putting in a PR for it.
Pretty simple error, trying to fix it myself but I'm sure you could do it much quicker.
If the email is ONLY plain text with no html, we get an error. If the email has html in it, then all works fine.
<?php
namespace App\Http\Controllers;
use LaravelGmail;
use Illuminate\Http\Request;
class TestGmailApiController extends Controller
{
/**
* testing
*
* @return void
*/
public function test ()
{
//$messages = LaravelGmail::message()->from('[email protected]')->take(5)->all();
$messages = LaravelGmail::message()->from('[email protected]')->take(5)->all();
foreach ($messages as $message)
{
dump($message->load()->getHtmlBody());
dump($message->load()->getRawPlainTextBody());
dump($message->load()->getPlainTextBody());
}
}
The error message is
Whoops, looks like something went wrong.
1/1
ErrorException in UserRefreshCredentials.php line 91:
Your application has authenticated using end user credentials from Gooogle Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/.
Great, now gmail keeps asking for a service account... might as well be asking me to create a rocket and successfully launch it into space. Thanks Google.
Anyway,
I can't give you the error message, but I spent time on it so I know the problem.
the problem is $body is null on line 376 in Services/Message/Mail.php
public function getBody( $type = 'text/plain' )
{
$part = $this->getBodyPart( $type );
$body = $part->getBody();
return $body->getData();
}
basically in this case something goes null that maybe you're not handling when getBodyPart() or Get Part() is called
when the email is plaintext only..
have you ever tried this on a plaintext email?
on this line
$messages = LaravelGmail::message()->unread()->preload()->all()->take(50);
{ "error": { "errors": [ { "domain": "global", "reason": "forbidden", "message": "Metadata scope does not support 'q' parameter" } ], "code": 403, "message": "Metadata scope does not support 'q' parameter" } }
I understand that the package is still under development but I just wanted to bring out this issue. At the moment, the credentials file is used to store credentials for only one user. You would have to logout the current user from Gmail so as to get authorization from another user. It would be great to have support for multiple users having their credentials stored in different files (or perhaps same file). This way, when using LaravelGmail::message()->using($token)->all()
to specify a different token specific to the current user.
Here's a similar scenario I experienced. Let's assume we have two users, User A and User B. User A will have their token stored in the credentials file after they authorize our app with Gmail. Now when we try to get the token with LaravelGmail::makeToken()
for User B without first logging out User A from Gmail, the LaravelGmail::check()
method fails and so the token previously stored for User A will be used for User B. So User B ends up retrieving emails of User A.
Hello, is there a way to get the whole thread, by thread id?
For example, I need to add a scope of Google Drive to not implement a double login with Laravel Socialite (which is the current solution I have).
How can I add scopes: "https://www.googleapis.com/auth/drive" ?
without me returning null? the code Line 134 "return array_get( $scopes, $scope );"
#43
As it is not in the documentation: I can not use this function properly.
Hi,
Do you have a step by step tutorial?
I am assuming one will have to put use LaravelGmail; in their controller?
Thanks
I get this error when i try to get all emails
Trait method __construct has not been applied, because there are collisions with other trait methods on Dacastro4\LaravelGmail\Services\Message\Mail
LaravelGmail::message()->all( );
Hey, I love your API, its great. However when trying to run it through all of my emails it only returns 99 instead of all of them(at this time is at 1300+). Is there a limit set somewhere that may be limiting it to 99 or is there an issue?
See below login from controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use LaravelGmail;
class ReportController extends Controller
{
public function mail()
{
$messages = LaravelGmail::message()->preload()->all();
#return $messages[0]->payload->parts[0]->body->data;
$subjects = $this->getSubject($messages);
return $subjects;
}
//This function will loop through all of the headers to find the subject and returns the array of subjects.
public function getSubject($messages)
{
$arr = array();
foreach($messages as $m)
{
foreach($m->payload->headers as $h)
{
if($h->name == 'Subject')
{
array_push($arr, $h->value);
}
}
}
return $arr;
}
}
I Attempted in using your take() function but it doens't seem to increase the limit...
When using $attachment->getMimeType() :
Dacastro4\LaravelGmail\Services\Message\Attachment::$getMimeType
Hey
Trying to set this up in my controller but am unable to due to error when adding "use Dacastro4\LaravelGmail;" I have followed the README.md to the bone and am unable to see where i went wrong....
Using laravel version 5.6
Hi there and thank you for this wrapper.
Is there a way to set the shown filename for a file i attach to a new email?
the take function is not working. when i use the take it say method not define
Excellent input, I found an error to solve, the error is when assigning the value to the nameFrom variable you placed nameTo, in the Replyable.php file
public function from( $from, $name = null )
{
$this->from = $from;
$this->nameTo = $name; <---this line
return $this;
}
I am getting the following error once I log into my Gmail account and redirect back to the app URL
Dacastro4\LaravelGmail\Services\Message and Dacastro4\LaravelGmail\Traits\SendsParameters define the same property ($params) in the composition of Dacastro4\LaravelGmail\Services\Message. However, the definition differs and is considered incompatible. Class was composed
Any ideas?
Hello! Help me pls!
Can't understand how to modify the config file config/gmail.php.
What to do inside of it?
project id,client id,client secret and redirect I set in .env file.
Is it necessary to do something with this string โ ?
'credentials_file_name' => env( 'GOOGLE_CREDENTIALS_NAME', 'gmail-json' ),
I downloaded .json credentials file from google console, pasted it to:
"[my project]/storage/app/gmail/tokens"
then I renamed it to: 'gmail-json.json'
Is it right?
Please add more mailing addresses
Ex : $mail->to(['[email protected]','[email protected]']);
Hey I couldn't find the option for drafting the gmail message. Could you please guide me through this.
Also Please explain how do I use Attachment Class as not much info is mentioned in your repo. Thank You
I am looking for an example to get started. Especially how to use the following:
LaravelGmail::getAuthUrl Gets the URL to auth the user.
LaravelGmail::redirect You can use this as a direct method Login
LaravelGmail::logout Logs out the user
LaravelGmail::check Checks if the user is logged in
Dacastro4\LaravelGmail\Exceptions\AuthException
No credentials found.
I've renamed the env variable of 'credentials_file_name' => env( 'GOOGLE_CREDENTIALS_NAME', 'client.json') with the downloaded file from Google stored in the root of my directory.
Any advice on this? Thanks a bunch for your work on this!
Hey I am implementing Gmail using your package but their is not much info added in this pack document. So at this point I am stuch on Attachment class it would be great if you add more info about how to use that class as I want to download attachment of an email.
hello dacastro4,
is there a way to have a refresh token so that the auth does not expire? i dont want to keep re-authenticating Gmail. thanks!
regards,
Joannes
when I use the getHtmlBody() function. error occur when the email has no html in it
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.