Как получить электронную почту из нескольких учетных записей, используя GmailAPI? - PullRequest
0 голосов
/ 04 июня 2019

Я сохранил токен доступа в БД и зациклил каждого пользователя на получение почты. он отлично работает для первого пользователя, для второго пользователя accesstoken обновляется, но получает почту первого пользователя. Я использую плагин LaravelGmail

Если я получаю доступ с одним пользователем, он работает нормально

public function sync()
{
    $stafflist = Staff::all();
    if (!empty($stafflist)) {
        foreach ($stafflist as $key => $value) {
            $this->service = new LaravelGmail;
            $set_token     = $this->setactiveToken($value->staffToken, $value->staffEmail);
            try {
                $messages = $this->service::message()->take(5)->all();

                if (!empty($messages)) {
                    foreach ($messages as $loop) {
                        $detmsg   = $this->service::message()->get($loop->getId());
                        $dettoken = $this->service::getAccessToken();

                        $maildate = $detmsg->getInternalDate();
                        $sender   = $detmsg->getHeader('From');
                        preg_match('/<(.*)>/', $sender, $matches);

                        $sender_mail = isset($matches[1]) ? $matches[1] : $sender;
                        $result      = Smailer::firstOrCreate(['mailReceiver' => $value->staffUID, 'mailThreadID' => $loop->getId()],
                            ['mailSender' => $sender_mail, 'mailSubject'                      => $detmsg->getSubject(),
                                'mailContent' => $detmsg->getPlainTextBody(), 'mailHasAttachment' => $detmsg->hasAttachments(), 'mailReceivedDt' => $maildate]);
                    }
                }
                unset($this->service);
            } catch (Google_Service_Exception $e) {

            }

        }
    }
    return redirect('control/mails');
}

private function setactiveToken($stoken = '', $email = '')
{
    $this->service::setAccessToken($stoken);
    if ($this->service::isAccessTokenExpired()) {
        $this->service::fetchAccessTokenWithRefreshToken($this->service::getRefreshToken());
        $token          = $this->service::getAccessToken();
        $token['email'] = $email;
        $resp           = Staff::where('staffEmail', $email)
            ->update(['staffToken' => json_encode($token)]);

    }
}
...