Better IMAP
Асинхронная Python библиотека для работы с IMAP протоколом. Упрощает получение и поиск электронных писем с поддержкой прокси и различных почтовых сервисов.
Особенности
- Асинхронная работа с IMAP серверами
- Поддержка прокси через better-proxy
- Автоматическое определение настроек IMAP по email адресу
- Гибкие возможности поиска и фильтрации писем
- Поддержка различных почтовых провайдеров
Установка
pip install better-imap
Быстрый старт
Базовое использование
import asyncio
from better_imap import MailBox
async def main():
# Создание подключения к почтовому ящику
async with MailBox("user@example.com", "password") as mailbox:
# Получение всех писем
messages = await mailbox.fetch_messages()
for message in messages:
print(f"От: {message.sender}")
print(f"Тема: {message.subject}")
print(f"Дата: {message.date}")
print(f"Текст: {message.text[:100]}...")
print("-" * 50)
asyncio.run(main())
Поиск писем с фильтрами
import asyncio
from datetime import datetime, timedelta
from better_imap import MailBox
async def main():
async with MailBox("user@example.com", "password") as mailbox:
# Поиск писем за последние 7 дней
since_date = datetime.now() - timedelta(days=7)
messages = await mailbox.fetch_messages(
search_criteria="ALL",
since=since_date,
allowed_senders=["@important-sender.com"],
folders=["INBOX", "Sent"]
)
print(f"Найдено {len(messages)} писем")
asyncio.run(main())
Поиск писем по регулярному выражению
import asyncio
import re
from better_imap import MailBox
async def main():
async with MailBox("user@example.com", "password") as mailbox:
# Поиск писем содержащих код подтверждения
pattern = r'\b\d{4,6}\b' # 4-6 цифр подряд
matches = await mailbox.search_matches(
regex=pattern,
folders=["INBOX"],
search_criteria="UNSEEN"
)
for message in matches:
print(f"Код найден в письме от {message.sender}")
# Извлечение кода из текста
code = re.search(pattern, message.text).group()
print(f"Код подтверждения: {code}")
asyncio.run(main())
Использование с прокси
import asyncio
from better_imap import MailBox
from better_proxy import Proxy
async def main():
# Настройка прокси
proxy = Proxy.from_str("http://user:pass@proxy-server.com:8080")
async with MailBox("user@example.com", "password", proxy=proxy) as mailbox:
messages = await mailbox.fetch_messages()
print(f"Получено {len(messages)} писем через прокси")
asyncio.run(main())
Поиск с повторными попытками
import asyncio
from better_imap import MailBox
async def main():
async with MailBox("user@example.com", "password") as mailbox:
# Ожидание письма с кодом подтверждения в течение 5 минут
try:
message = await mailbox.search_with_retry(
regex=r'\b\d{6}\b', # 6-значный код
timeout=300, # 5 минут
interval=10 # проверка каждые 10 секунд
)
if message:
print("Код подтверждения получен!")
print(f"Текст: {message.text}")
else:
print("Письмо не найдено за указанное время")
except Exception as e:
print(f"Ошибка при поиске: {e}")
asyncio.run(main())
Параметры конструктора MailBox
address(str) - Email адрес для подключенияpassword(str) - Пароль от почтового ящикаservice(ServiceType, optional) - Настройки IMAP сервера (определяется автоматически)use_firstmail_on_unknown_domain(bool) - Использовать FirstMail для неизвестных доменовproxy(Proxy, optional) - Прокси сервер для подключенияtimeout(float) - Таймаут операций в секундах (по умолчанию 10)loop(asyncio.AbstractEventLoop, optional) - Event loop для асинхронных операций
Методы поиска
fetch_messages()
Основной метод для получения писем с различными фильтрами:
folders- Список папок для поиска (по умолчанию ["INBOX"])search_criteria- Критерии поиска IMAP ("ALL", "UNSEEN")since- Поиск писем с указанной датыallowed_senders- Список разрешенных отправителей (regex паттерны)allowed_receivers- Список разрешенных получателей (regex паттерны)sender_regex- Регулярное выражение для фильтрации отправителей
search_matches()
Поиск писем по регулярному выражению в тексте письма.
search_match()
Поиск одного письма по регулярному выражению.
search_with_retry()
Поиск письма с повторными попытками в течение заданного времени.
Обработка ошибок
Библиотека предоставляет специализированные исключения:
IMAPLoginFailed- Ошибка авторизацииIMAPSearchTimeout- Таймаут при поискеWrongIMAPAddress- Неправильный IMAP адрес
import asyncio
from better_imap import MailBox
from better_imap.errors import IMAPLoginFailed, IMAPSearchTimeout
async def main():
try:
async with MailBox("user@example.com", "wrong_password") as mailbox:
messages = await mailbox.fetch_messages()
except IMAPLoginFailed:
print("Неверные учетные данные")
except IMAPSearchTimeout:
print("Превышено время ожидания поиска")
asyncio.run(main())
Лицензия
MIT License
Metadata
Release files for better-imap 1.4.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| better_imap-1.4.8.tar.gz | 15.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| better_imap-1.4.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 31.3 kB
Release files / better_imap-1.4.8.tar.gz
| Download URL | better_imap-1.4.8.tar.gz |
|---|---|
| Size | 15.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
52e7c2fcd3bfcaef336f12b5b53ec6dba4becf77654321f19f3566cdf7b84d8b
|
|
BLAKE2b-256 checksum How to use checksums |
7c4218bcaa724afb4ef12d0dc630028ed846f7219e37f053f3c0f701140d367d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.9.12 Darwin/25.0.0
|
Release files / better_imap-1.4.8-py3-none-any.whl
| Download URL | better_imap-1.4.8-py3-none-any.whl |
|---|---|
| Size | 16.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a7d2aa2ed54cb154813caf4ea85c28e374a33b38e9c52559efe442d73718d05
|
|
BLAKE2b-256 checksum How to use checksums |
5d74a4f2583ddf8596dcaf0887ef5cc590398c1b9aa881853f310a47aa1d8cb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.9.12 Darwin/25.0.0
|