ddomanskyi / laravel-gmail
来自Dacastro4(https://github.com/dacastro4/laravel-gmail/)的Laravel Gmail API包,具有多账户处理改进功能
Requires
- php: ^7.2
- google/apiclient: ^2.4
- illuminate/auth: ~5.8|^6.0
- illuminate/config: ~5.8|^6.0
- illuminate/database: ~5.8|^6.0
- illuminate/routing: ~5.8|^6.0
- illuminate/session: ~5.8|^6.0
- illuminate/support: ~5.8|^6.0
- swiftmailer/swiftmailer: ~5.8|^6.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ~3.4
- dev-master
- v3.2.6
- v3.2.5
- v3.2.4
- v3.2.3
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.0
- 3.0.x-dev
- v3.0.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.x-dev
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.2
- v1.1
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.6.2
- v0.6.1.1
- v0.6.1
- v0.6
- v0.5
- 0.4.x-dev
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4
- 0.3.x-dev
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3
- 0.2.x-dev
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2
- v0.1
- v0.1-beta
- dev-heads/v2.1.0
- dev-dev
- dev-bugfix/readonly-permissions
- dev-mail-fix
- dev-hotfix/next-page-token
- dev-take-method
This package is not auto-updated.
Last update: 2024-10-03 09:53:54 UTC
README
感谢Dacastro4(https://github.com/dacastro4/laravel-gmail/)提供此包,以及感谢Igor Hmelevskoy(https://github.com/igorhmelevskoy)为此包的改进,使其能够同时使用多个Gmail账户。
如何使用多个账户
$mail = new Mail('filenamejson@gmail.com');
$mail->to( "test@gmail.com", "Test Name");
$mail->subject( "Test" );
$mail->message( "my test message" );
$mail->send();
Gmail
Laravel 6的Gmail API
如果您需要与Laravel 5兼容,请使用版本2.0.x
。
要求
- >= PHP 7.0 <= PHP 7.3
- Laravel 6
安装
将ddomanskyi/laravel-gmail-multiaccounts添加到composer.json中。
"ddomanskyi/laravel-gmail-multiaccounts": "^3.0"
运行composer update以拉取最新版本。
或者运行
composer require ddomanskyi/laravel-gmail-multiaccounts
现在打开config/app.php
并将服务提供者添加到providers数组中。
'providers' => [ Ddomanskyi\LaravelGmail\LaravelGmailServiceProvider::class, ]
现在添加别名。
'aliases' => [ 'LaravelGmail' => Ddomanskyi\LaravelGmail\Facade\LaravelGmail::class, ]
对于laravel >=5.5,这就足够了。此包支持Laravel新的包发现。
从2.0迁移到3.0
需要Laravel 6,您只需将依赖项更改为"laravel/laravel": "^6.0"
从1.0迁移到2.0
所做的唯一更改是增加了多凭证功能。
- 将您的composer.json从
"ddomanskyi/laravel-gmail-multiaccounts": "^1.0"
更改为"ddomanskyi/laravel-gmail-multiaccounts": "^2.0"
我必须更改版本,因为有一个打字错误,这可能会破坏调用这些属性的应用程序。
所有包含单词"threat"的变量都已更改为"thread"(是的,我知道..抱歉)例如
邮件类$threatId
> $threadId
可回复类$mail->setReplyThreat()
> $mail->setReplyThread()
等等。
从0.6迁移到1.0
所做的唯一更改是增加了多凭证功能。
- 将您的composer.json从
"ddomanskyi/laravel-gmail-multiaccounts": "^0.6"
更改为"ddomanskyi/laravel-gmail-multiaccounts": "^1.0"
如果您不想使用多用户凭证,您不需要做任何事情,如果您想,您将需要再次登录以为每个用户创建一个新的凭证文件。
配置
您只需在您的.env
文件中设置以下变量,然后您就可以继续了
GOOGLE_PROJECT_ID= GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GOOGLE_REDIRECT_URI= GOOGLE_ALLOW_MULTIPLE_CREDENTIALS GOOGLE_ALLOW_JSON_ENCRYPT
要修改作用域和凭证文件名,只需运行
运行php artisan vendor:publish --provider="Ddomanskyi\LaravelGmail\LaravelGmailServiceProvider"
并修改配置文件config/gmail.php
。
允许多用户凭证
要允许多用户凭证,将您的配置文件中的allow_multiple_credentials
更改为true
,或者如果不使用配置文件,则将.env变量GOOGLE_ALLOW_MULTIPLE_CREDENTIALS
设置为true。
允许对json文件进行加密
要允许对json文件进行加密,将您的配置文件中的allow_json_encrypt
更改为true
,或者如果不使用配置文件,则将.env变量GOOGLE_ALLOW_JSON_ENCRYPT
设置为true。
可用作用域
- all (这个在Gmail作用域中不存在,我添加了它。)
- compose
- 插入
- 标签
- 元数据
- 修改
- 只读
- 发送
- 基本设置
- 共享设置
注意:要更改范围,用户必须注销并重新登录。
附加范围
如果出于某种原因需要添加附加范围。
在config/gmail.php中以URL样式添加附加范围
'additional_scopes' => [
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/documents',
'https://www.googleapis.com/auth/spreadsheets'
],
示例
欢迎Blade
<body> <h1>{{ LaravelGmail::user() }}</h1> @if(LaravelGmail::check()) <a href="{{ url('oauth/gmail/logout') }}">logout</a> @else <a href="{{ url('oauth/gmail') }}">login</a> @endif </body>
路由
Route::get('/oauth/gmail', function (){ return LaravelGmail::redirect(); }); Route::get('/oauth/gmail/callback', function (){ LaravelGmail::makeToken(); return redirect()->to('/'); }); Route::get('/oauth/gmail/logout', function (){ LaravelGmail::logout(); //It returns exception if fails return redirect()->to('/'); });
然后,如果您在控制器或任何其他地方想要执行逻辑,您可以这样做
$messages = LaravelGmail::message()->subject('test')->unread()->preload()->all(); foreach ( $messages as $message ) { $body = $message->getHtmlBody(); $subject = $message->getSubject(); }
注意,如果您没有预加载消息,您必须这样做: $body = $message->load()->getSubject();
之后,您就不需要再次调用它了。
文档
基本
LaravelGmail::getAuthUrl
获取用户认证的URL。
LaravelGmail::redirect
您可以使用此直接方法 <a href="{{ LaravelGmail::redirect() }}">登录</a>
LaravelGmail::makeToken()
在json文件中设置和保存AccessToken(在回调中很有用)
LaravelGmail::logout
注销用户
LaravelGmail::check
检查用户是否已登录
发送
use Ddomanskyi\LaravelGmail\Services\Message\Mail;
...
$mail = new Mail;
对于 to
、from
、cc
和 bcc
,您可以设置一个包含电子邮件和名称的数组或一个包含电子邮件和名称的字符串。
$mail->using( $token )
如果您不想使用令牌文件,可以使用此函数来设置请求中要使用的令牌。它不会刷新
$mail->to( $to, $name = null )
设置收件人电子邮件和名称,名称为可选
$mail->from( $from, $name = null )
设置发件人电子邮件
$mail->cc( $cc, $name = null )
设置抄送
$mail->bcc( $bcc, $name = null )
设置盲抄送
$mail->subject( $subject )
设置电子邮件的主题
$mail->message( $message )
设置电子邮件正文
$mail->view( 'view.name', $dataArray )
从Blade文件设置正文
$mail->attach( ...$path )
将文件附件添加到电子邮件
$mail->priority( $priority )
将电子邮件的优先级设置为1到5
$mail->reply()
回复现有电子邮件
$mail->send()
发送新电子邮件
$mail->setHeader( $header, $value )
将标题设置为电子邮件
邮件
$mail->getId
返回电子邮件的ID
$mail->getInternalDate
返回UNIX格式的日期
$mail->getDate
从电子邮件标题返回Carbon日期
$mail->getLabels
返回电子邮件所有标签的数组
$mail->getHeaders
返回标题的集合。每个标题都是一个包含两行的数组,键和值
$mail->getSubject
返回主题的字符串
$mail->getFrom
返回包含发件人姓名和电子邮件的数组
$mail->getFromName
返回姓名的字符串
$mail->getFromEmail
返回电子邮件的字符串
$mail->getTo
返回包含所有收件人姓名和电子邮件的数组
$mail->getDeliveredTo
返回收件人的电子邮件
$mail->getPlainTextBody
返回电子邮件的纯文本版本
$mail->getRawPlainTextBody
返回基于base64加密的正文原始版本
$mail->hasAttachments
如果电子邮件有附件,则返回布尔值
$mail->load
加载电子邮件的所有信息(标签、正文、标题)。您在单个电子邮件上调用此函数。要从开始加载,请参阅 preload()
$mail->getHeader( $headerName, $regex = null )
返回按名称的标题。可选地,您可以在值上执行正则表达式
标签
$mail->markAsRead
从电子邮件中移除“未读”标签。
$mail->markAsUnread
将“未读”标签添加到电子邮件中。
$mail->markAsImportant
将“重要”标签添加到电子邮件中。
$mail->markAsNotImportant
从电子邮件中移除“重要”标签。
$mail->addStar
将“星标”标签添加到电子邮件中。
$mail->removeStar
从电子邮件中移除“星标”标签。
$mail->sendToTrash
将“垃圾箱”标签添加到电子邮件中。
$mail->removeFromTrash
从电子邮件中移除“垃圾箱”标签。
$mail->addLabel($string|$array)
向电子邮件添加多个或单个标签
$mail->removeLabel($string|$array)
从电子邮件中移除多个或单个标签
$mail->getAttachments()
获取电子邮件上所有附件的集合
$mail->getAttachmentsWithData()
获取电子邮件上所有附件的集合,包括数据
附件
use Ddomanskyi\LaravelGmail\Services\Message\Attachment
...
$attachment = new Attachment;
$attachment->getId
返回附件的 ID
$attachment->getFileName
返回附件的文件名
$attachment->getMimeType
返回 MIME 类型,例如:application/pdf
$attachment->getSize
返回附件的大小(以字节为单位)
$attachment->getData
从附件中获取所有信息。如果您调用 getAttachmentsWithData
,则不需要此方法。
$attachment->saveAttachmentTo($path = null, $filename = null, $disk = 'local')
将附件保存到存储文件夹。您可以传递路径、名称和磁盘来使用。
消息
LaravelGmail::message()->all( $pageToken = null )
返回收件箱中的所有电子邮件
LaravelGmail::message()->take(2)->all( $pageToken = null )
take
方法通过设置的数量限制查询结果中的电子邮件
LaravelGmail::message()->get( $id )
返回包含所有信息的单个电子邮件
修饰符
您可以使用这些方法修改您的查询。例如
获取所有未读电子邮件:LaravelGmail::message()->unread()->all()
message()->unread()
message()->from( $email )
message()->in( $box = 'inbox' )
message()->hasAttachment()
message()->subject($subject)
->after($date)
和 ->before($date)
message()->raw($query)
用于自定义查询
所有可能的过滤器都在 Filterable 特性 中
当然,您可以使用流畅的 API。
LaravelGmail::message() ->from('someone@gmail.com') ->unread() ->in('TRASH') ->hasAttachment() ->all()
预加载
您可以通过调用此方法预加载每个电子邮件的正文、标题和其他内容。
LaravelGmail::preload()
示例
LaravelGmail::message() ->from('someone@gmail.com') ->unread() ->in('TRASH') ->hasAttachment() ->preload() ->all()
常见问题
登录要求
如果您收到“登录要求”错误,请尝试在 /storage/app/gmail/tokens/
下创建 gmail-json.json
文件。
Beerpay 支持服务
嘿,兄弟!帮我点一杯 🍻!