בעיית התחברות ל-API של המייל באמצעות PHP
-
אני מנסה להתחבר ל-API של GMAIL באמצעות הספרייה, אבל מקבל שגיאה
הקוד שלי:
<?php use Google\Client; use Google\Service\Gmail; require __DIR__ . '/vendor/autoload.php'; $client = new Google_Client(); $client->setAuthConfig(__DIR__.'/email-api.json'); $client->setScopes(['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.labels']); $service = new Gmail($client); try { $labels = $service->users_labels->listUsersLabels('me'); } catch (Google\Service\Exception $e) { $error = json_decode($e->getMessage(), true); print_r($error); }
התוצאה:
Array ( [error] => Array ( [code] => 400 [message] => Precondition check failed. [errors] => Array ( [0] => Array ( [message] => Precondition check failed. [domain] => global [reason] => failedPrecondition ) ) [status] => FAILED_PRECONDITION ) )
איפה הטעות?
-
@A0533057932 כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
@איש-נחמד רק לוודאות
הפעלת אימות דו שלבי + סיסמה לאפליקציה
ודרך הסיסמה לאפליקציה אתה ניגש
נכון?הקוד אמור לפעול דרך מרכזיית אסטריסק, ולא באמצעות גלישה בפועל
האם עלי להפעיל אימות דו שלבי למייל כדי לאפשר התחברות מסוג זה?
-
@A0533057932 כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
@איש-נחמד רק לוודאות
הפעלת אימות דו שלבי + סיסמה לאפליקציה
ודרך הסיסמה לאפליקציה אתה ניגש
נכון?זה לא SMTP, זה Gmail API, כך שזה לא רלוונטי
-
@איש-נחמד כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
איפה הטעות?
מהו קובץ הJSON? של חשבון שירות?
כדי לגשת לAPI של שירותי גוגל שמספקים מידע משתמש פרטי, לדוגמה Gmail או Calendar, אי אפשר להשתמש בחשבון שירות, צריך להשתמש בAuth0 עם הרשאה של המשתמש במסך הרשאה (אלא אם כן מדובר בGoogle Worspace (דומיין), שאז אפשר להגדיר delegation). -
@צדיק-תמים כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
@איש-נחמד כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
איפה הטעות?
מהו קובץ הJSON? של חשבון שירות?
כדי לגשת לAPI של שירותי גוגל שמספקים מידע משתמש פרטי, לדוגמה Gmail או Calendar, אי אפשר להשתמש בחשבון שירות, צריך להשתמש בAuth0 עם הרשאה של המשתמש במסך הרשאה (אלא אם כן מדובר בGoogle Worspace (דומיין), שאז אפשר להגדיר delegation).כאמור, אני צריך את זה בתוך מרכזיית אסטריסק, כך שאין לי אפשרות לפתוח את מסך האימות
האם אני יכול לעקוף את ההגבלה הזו באמצעות התחברות ל-google script שמחובר לחשבון? -
@איש-נחמד אפשר להדפיס לטרמינל את הלינק למסך האימות או סתם להריץ לוקאלית ואז להעלות לשרת, אם מעניין אותך אשתדל לפרט יותר.
@איש-נחמד כתב בבעיית התחברות ל-API של המייל באמצעות PHP:
האם אני יכול לעקוף את ההגבלה הזו באמצעות התחברות ל-google script שמחובר לחשבון?
בהחלט, משהו כזה:
const KEY = '**********************'; function doPost(e) { const { key } = JSON.parse(e.postData.contents); if (key !== KEY) { return ContentService.createTextOutput(JSON.stringify({ error: 'Invalid key' })) .setMimeType(ContentService.MimeType.JSON) .setStatusCode(403); } const token = ScriptApp.getOAuthToken(); return ContentService.createTextOutput(JSON.stringify({ token })).setMimeType(ContentService.MimeType.JSON); } // GmailApp.getDraft() // don't remove!
אתה שם את הקוד הזה, פורס אותו, ואז אתה פשוט קורא לכתובת של הAPI של גוגל, עם header:
"Authorization": "Bearer <token>"
הטוקן הזה אמור לעבוד רק לכמה דקות.
יכול להיות שאפשר לשלב אותו גם בספריה של גוגל, אני לא מכיר את הספריה לPHP.