יש לי קוד בשפת PHP שאמור לסמן כנקרא+תווית כלשהוא מיילים עם id שאני שולח לפונקצייה
לצורך כך צריך ליצור לקוח בקלאוד ואח"כ ליצור טוקן
אך משום מה הטוקן מחזיק מעמד רק כמה ימים ואז אני צריך להיכנס ולאמת מחדש במקום שזה יתרענן אוטומטית
ניסיתי לבקש עזרה מGPT אבל הוא רק סיבך אותי...
אשמח מאוד אם תוכלו לעזור לי
זה הקוד שיש לי כרגע
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', '/var/www/unread_mail.log');
require __DIR__ . '/vendor/autoload.php';
use Google\Client;
use Google\Service\Gmail;
use Google\Service\Gmail\ModifyMessageRequest;
function unread_mail($id, $status)
{
$credentialsPath = '/var/www/client_unread_gmail.json'; // קובץ האישורים
$tokenPath = '/var/www/token_unread_gmail.json'; // קובץ הטוקן
$client = new Client();
$client->setApplicationName('Gmail API PHP Quickstart');
$client->setScopes(Gmail::GMAIL_MODIFY);
$client->setAuthConfig($credentialsPath);
$client->setAccessType('offline');
$client->setPrompt('select_account'); // כדי לא לבקש אישור כל פעם מחדש
// אם יש token שמור, טען אותו
if (file_exists($tokenPath)) {
$accessToken = json_decode(file_get_contents($tokenPath), true);
$client->setAccessToken($accessToken);
}
// אם אין token או שהוא לא בתוקף, יש לחדש אותו
if ($client->isAccessTokenExpired()) {
// אם הטוקן פג תוקף, נסה לרענן אותו
if ($client->getRefreshToken()) {
try {
$newAccessToken = $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
$client->setAccessToken($newAccessToken);
file_put_contents($tokenPath, json_encode($client->getAccessToken()));
} catch (Exception $e) {
// אם רענון הטוקן נכשל, צריך לעשות אימות מחדש
$authUrl = $client->createAuthUrl();
printf("פתח את הקישור הבא בדפדפן שלך כדי לאמת:\n%s\n", $authUrl);
print 'הזן את הקוד שקיבלת: ';
$authCode = trim(fgets(STDIN));
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
file_put_contents($tokenPath, json_encode($accessToken));
}
} else {
// אם אין refresh_token, יש צורך באימות מחדש
$authUrl = $client->createAuthUrl();
printf("פתח את הקישור הבא בדפדפן שלך כדי לאמת:\n%s\n", $authUrl);
print 'הזן את הקוד שקיבלת: ';
$authCode = trim(fgets(STDIN));
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
file_put_contents($tokenPath, json_encode($accessToken));
}
}
$service = new Gmail($client);
$labels = $service->users_labels->listUsersLabels('me');
$update_id = null;
foreach ($labels->getLabels() as $label) {
if ($label->getName() === $status) {
$update_id = $label->getId();
break;
}
}
if (!$update_id) {
$newLabel = new Google\Service\Gmail\Label([
'name' => $status,
'labelListVisibility' => 'labelShow',
'messageListVisibility' => 'show'
]);
$createdLabel = $service->users_labels->create('me', $newLabel);
$update_id = $createdLabel->getId();
}
$messageId = $id;
$modifyRequest = new ModifyMessageRequest([
'addLabelIds' => [$update_id],
'removeLabelIds' => ['UNREAD', 'INBOX']
]);
try {
$service->users_messages->modify('me', $messageId, $modifyRequest);
return "ok";
} catch (Exception $e) {
return 'שגיאה: ' . $e->getMessage();
}
}
תודה רבה מראש!