Можно ли использовать XOAUTH2 через imaplib для доступа к Google Workspace Gmail без включения IMAP в домене?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Можно ли использовать XOAUTH2 через imaplib для доступа к Google Workspace Gmail без включения IMAP в домене?

Сообщение Anonymous »

У меня есть задача создать интеграцию с Gmail, которая будет собирать электронные письма из почтовых ящиков пользователей и хранить их в системе Django. Клиент, с которым я работаю, не разрешает включить IMAP в своей учетной записи Google Workspace.
Следующий код выполняется, но выдает сообщение Произошла ошибка: [ALERT] Доступ по IMAP отключен для ваш домен. Если у вас есть вопросы об этой функции, обратитесь к администратору домена. (Failure) ошибка.
Я просмотрел всю панель администратора Google Workspace, но не нашел способа включить для этого доступ.
Возможно ли это вообще? Мне сказали, что, поскольку XOAUTH2 является методом аутентификации, меня блокируют на уровне домена, и это никогда не сработает.
Мой текущий (грубо) код выглядит следующим образом:
from imaplib import IMAP4_SSL
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import os.path
import pickle

def get_gmail_oauth_credentials():
SCOPES = ['https://mail.google.com/']
creds = None

if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json',
SCOPES
)
# This will open the browser for user consent
creds = flow.run_local_server(port=0)

# Save the credentials for future runs
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)

return creds

def connect_to_gmail_imap(user_email):
# Get OAuth2 credentials
creds = get_gmail_oauth_credentials()

auth_string = f'user={user_email}\1auth=Bearer {creds.token}\1\1'

# Connect to Gmail's IMAP server
imap_conn = IMAP4_SSL('imap.gmail.com')

# Authenticate using XOAUTH2
imap_conn.authenticate('XOAUTH2', lambda x: auth_string)

return imap_conn

if __name__ == '__main__':
# Replace with your Gmail address
USER_EMAIL = 'test@example.com'

try:
imap = connect_to_gmail_imap(USER_EMAIL)
print("Successfully connected to Gmail!")

# Example: List all mailboxes
typ, mailboxes = imap.list()
if typ == 'OK':
print("\nAvailable mailboxes:")
for mailbox in mailboxes:
print(mailbox.decode())

imap.select('INBOX')
typ, messages = imap.search(None, 'RECENT')
if typ == 'OK':
print(f"\nFound {len(messages[0].split())} recent messages")

imap.logout()

except Exception as e:
print(f"An error occurred: {e}")


Подробнее здесь: https://stackoverflow.com/questions/793 ... ce-gmail-w
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»