Использование Python и Gmail API для получения списка отправителей нашей электронной почты
Table Of Content
В этом посте мы попробуем изучить и получить хотя бы небольшое представление о том, как использовать Gmail API для получения списка отправителей нашей электронной почты. Я предполагаю, что у вас уже есть учетная запись в Google Cloud. Если нет, то создайте новую. Затем нам нужно создать новый проект Google Cloud.
Мы собираемся включить Gmail API для только что созданного проекта. Найдите Gmail API в верхней строке поиска, затем нажмите Gmail API в разделе маркетплейс.
Продолжайте и нажмите "Включить".
Вы будете перенаправлены на панель управления Gmail API. Теперь нам нужно создать учетные данные для нашего приложения в будущем. Нажмите кнопку "Создать учетные данные".
В выпадающем списке "Выберите 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. Спасибо за чтение.