Git Product home page Git Product logo

laravel-gmail's People

Contributors

alies-dev avatar andrewtweber avatar avinash403 avatar dacastro4 avatar evertt avatar igormatkovic avatar jesephan avatar jonahklimack avatar jtwiest avatar laravel-shift avatar martinschenk avatar matthewhutchings avatar mewejo avatar mohammedtalal avatar musiwei avatar myint-oo avatar mylesduncanking avatar mzaalan avatar nasatome avatar oriceon avatar robfrancken avatar skn-036 avatar turbo124 avatar uacode avatar yoloswagseo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-gmail's Issues

Batch Request ?

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 ?

Class 'Dacastro4\LaravelGmail' not found

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

Send Emails using Laravel Mail Facades

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,

feature request: ->take(5) or ->some(5) instead of all()

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

Class laravelgmail does not exist

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 ?

I get error "Invalid token format"

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

Reply to existing messages

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" } }

Bad Aliases

I think aliases is wrong ๐Ÿ‘Ž

'aliases' => [
'Twitter' => Dacastro4\LaravelGmail\Facades\LaravelGmail::class,
]

Can't login with multiple users?

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!

Class 'Dacastro4\LaravelGmail\Facades\LaravelGmail' not found

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!

Is it possible to connect automatically at the email address without user logging in ?

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

getting gmail messages

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 missing

Page token is missing when using limit data.

LaravelGmail::message()->limit(10)->in( $box = 'inbox' )->preload()->all();

How can i access pagetoken.

Return subject without preload?

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?

Filter e-mails by date

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.

i haves a error in email sending in laravel

$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)

getBody on null

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.

withparts
withoutpart

How to send an email?

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.

error when the email has no html ?

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?

error "Metadata scope does not support 'q' parameter"

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" } }

Store credentials for multiple users

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.

$message()->preload()->all(); doesn't return all emails

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

Unable to get Mime Type

When using $attachment->getMimeType() :

Dacastro4\LaravelGmail\Services\Message\Attachment::$getMimeType

Class 'Dacastro4\LaravelGmail' Not Found

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

Attachment Filename

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?

Error namefrom

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;
}

Fatal Error

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?

InvalidArgumentException in Client.php line 433: Invalid token format

Hello! Help me pls!

  1. 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' ),

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

How Do I draft an Email

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

Does anyone have have a sample controller?

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

No credentials found.

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!

How Do I use Attachment Class ?

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.

refresh token

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.