turbo124/laravel-gmail

Laravel的Gmail API包

v5.0.2 2021-05-08 00:17 UTC

README

Build Status Scrutinizer Code Quality GitHub issues Total Downloads Monthly Downloads GitHub license

Gmail

Laravel 8的Gmail API

您需要在Google Console中创建一个应用。请参考这里的指南。

如果您需要Laravel 5的兼容性,请使用版本2.0.x。如果您需要Laravel 6的兼容性,请使用版本3.0.x。如果您需要Laravel 7的兼容性,请使用版本4.0.x

要求

  • >= PHP 7.2.5 <= PHP 7.3
  • Laravel 7

安装

将dacastro4/laravel-gmail添加到composer.json。

"dacastro4/laravel-gmail": "^5.0"

运行composer update以获取最新版本。

或者运行

composer require dacastro4/laravel-gmail

现在打开config/app.php并将服务提供者添加到providers数组中。

'providers' => [
    Dacastro4\LaravelGmail\LaravelGmailServiceProvider::class,
]

现在添加别名。

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

对于laravel >=5.5,这样就完成了。此包支持Laravel新的Package Discovery

从4.0迁移到5.0

需要Laravel 8,您必须将依赖项更改为"laravel/laravel": "^8.0"。请参考从6.x升级到8.0的指南

从3.0迁移到4.0

需要Laravel 7,您必须将依赖项更改为"laravel/laravel": "^7.0"。请参考从6.x升级到7.0的指南

从2.0迁移到3.0

需要Laravel 6,您只需更改依赖项为"laravel/laravel": "^6.0"

从1.0迁移到2.0

唯一更改的是多凭证功能。

  • 将您的composer.json从"dacastro4/laravel-gmail": "^1.0"更改为"dacastro4/laravel-gmail": "^2.0"

由于一个错误,我不得不更改版本,这可能会破坏调用这些属性的应用程序。

所有包含“威胁”一词的变量都已更改为“线程”(是的,我知道……抱歉)例如

邮件类$threatId > $threadId

可回复类$mail->setReplyThreat() > $mail->setReplyThread()

等等。

从0.6迁移到1.0

唯一更改的是多凭证功能。

  • 将您的composer.json从"dacastro4/laravel-gmail": "^0.6"更改为"dacastro4/laravel-gmail": "^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="Dacastro4\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。

可用作用域

  • 所有 (这个在Gmail作用域中不存在,我添加了它。)
  • 撰写
  • 插入
  • 标签
  • 元数据
  • 修改
  • 只读
  • 发送
  • 基本设置
  • 共享设置

关于Gmail API作用域的更多信息

注意:要更改作用域,用户必须注销并重新登录。

附加作用域

如果出于某种原因您需要添加附加作用域。

在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() 设置并保存AccessToken到json文件(在回调中很有用)

LaravelGmail::logout 注销用户

LaravelGmail::check 检查用户是否已登录

发送

use Dacastro4\LaravelGmail\Services\Message\Mail;

...

$mail = new Mail;

对于 tofromccbcc,您可以设置电子邮件和姓名的数组或电子邮件和姓名的字符串。

$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 Dacastro4\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 文件。