CoderCastrov logo
CoderCastrov
Питон

Использование Python и Gmail API для получения списка отправителей нашей электронной почты

Использование Python и Gmail API для получения списка отправителей нашей электронной почты
просмотров
4 мин чтение
#Питон
Table Of Content

    В этом посте мы попробуем изучить и получить хотя бы небольшое представление о том, как использовать Gmail API для получения списка отправителей нашей электронной почты. Я предполагаю, что у вас уже есть учетная запись в Google Cloud. Если нет, то создайте новую. Затем нам нужно создать новый проект Google Cloud.

    Мы собираемся включить Gmail API для только что созданного проекта. Найдите Gmail API в верхней строке поиска, затем нажмите Gmail API в разделе маркетплейс.

    Gmail API

    Продолжайте и нажмите "Включить".

    Включить

    Вы будете перенаправлены на панель управления Gmail API. Теперь нам нужно создать учетные данные для нашего приложения в будущем. Нажмите кнопку "Создать учетные данные".

    Создать учетные данные

    В выпадающем списке "Выберите API" выберите Gmail API.

    Gmail API

    Затем выберите "Пользовательские данные" и нажмите "Далее".

    Пользовательские данные

    Заполните всю эту информацию для вашего нового приложения. Вам нужно написать имя приложения, так как оно будет отображаться для пользователей. Вам также нужно указать электронную почту разработчика и электронную почту поддержки. Нажмите "Сохранить и продолжить".

    Информация об приложении

    Мы пока пропустим раздел областей видимости. В следующем разделе нас спрашивают о типе приложения. Выберите "Приложение для настольного компьютера".

    Тип приложения

    На последнем этапе вам будут предоставлены учетные данные для вашего приложения. Скачайте и запомните, где вы их сохранили.

    Учетные данные

    Теперь мы собираемся написать наш код на Python.

    Создайте новый каталог и назовите его как вам нравится. Переместите загруженный файл учетных данных JSON в этот каталог и назовите его credentials.json.

    Откройте терминал внутри каталога и выполните эту команду. Для лучшей практики вам действительно нужно сначала создать виртуальное окружение. Мы устанавливаем библиотеку для использования Gmail API.

    pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

    Затем создадим новый файл с именем main.py. Добавьте эти строки импорта, так как нам они понадобятся позже.

    import os.path
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials

    Затем нам нужно определить нашу область видимости. В основном это говорит, насколько много доступа получит наше приложение. Поскольку мы только получаем список отправителей, нам не нужен доступ на запись.

    SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

    Теперь мы позволим пользователю войти в систему. После того, как они вошли в систему, мы сохраняем токен, чтобы пользователи не должны были снова входить в систему в будущем, если файл token.json отсутствует.

    creds = None
    
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    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)
            creds = flow.run_local_server(port=0)
        # Сохраняем учетные данные для следующего запуска
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    Затем мы создаем экземпляр службы Gmail, используя учетные данные пользователя.

    service = build('gmail', 'v1', credentials=creds)

    Давайте получим последние 10 сообщений из папки "Входящие". Измените этот параметр по своему усмотрению.

    msg_res = service.users().messages()
    results = msg_res.list(userId='me', maxResults=10).execute()
    messages = results.get('messages', [])

    Теперь давайте выведем отправителей электронной почты. По сути, мы перебираем каждое сообщение в списке, затем запрашиваем детали сообщения. Затем мы проходим через заголовки, чтобы найти информацию об отправителе. Полная документация здесь.

    if not messages:
        print('Сообщений не найдено.')
    else:
        print('Сообщение от:')
        for msg in messages:
            msg_dict = msg_res.get(userId='me', id=msg['id']).execute()
            msg_headers = msg_dict['payload']['headers']
            msg_from = filter(lambda hdr: hdr['name'] == 'From', msg_headers)
            msg_from = list(msg_from)[0]
            print(msg_from['value'])

    Ваш файл main.py теперь должен выглядеть так:

    import os.path
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    
    SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
    
    creds = None
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    
    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)
            creds = flow.run_local_server(port=0)
        # Сохраняем учетные данные для следующего запуска
        with open('token.json', 'w') as token:
            token.write(creds.to_json())
    
    service = build('gmail', 'v1', credentials=creds)
    
    msg_res = service.users().messages()
    results = msg_res.list(userId='me', maxResults=10).execute()
    messages = results.get('messages', [])
    
    if not messages:
        print('Сообщений не найдено.')
    else:
        print('Сообщение от:')
        for msg in messages:
            msg_dict = msg_res.get(userId='me', id=msg['id']).execute()
            msg_headers = msg_dict['payload']['headers']
            msg_from = filter(lambda hdr: hdr['name'] == 'From', msg_headers)
            msg_from = list(msg_from)[0]
            print(msg_from['value'])

    Запустите это в своем терминале внутри каталога:

    python main.py

    Программа будет печатать что-то вроде Имя отправителя <email@gmail.com> повторяющимся для максимального количества электронной почты, указанного в параметре выше (в примере 10).


    Вот и все. Вы успешно получили список отправителей на вашу электронную почту с помощью Python и Gmail API. Спасибо за чтение.