IMAP tools
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file better_imap-1.4.7.tar.gz.
File metadata
- Download URL: better_imap-1.4.7.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.9.12 Darwin/25.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a7f67d91411df59f318010df4024bcde0f9fbca534e9a529c54b960719cc76c
|
|
| MD5 |
2fc16a69c905f687d61427cf01017a1a
|
|
| BLAKE2b-256 |
b4c9d80119523ce5c36ac05e835d13e5cd7d54b365a741e2a473157ff0880e8c
|
File details
Details for the file better_imap-1.4.7-py3-none-any.whl.
File metadata
- Download URL: better_imap-1.4.7-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.9.12 Darwin/25.0.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10adb5e9243086b38eeeb3afe599388b1f29c066d82843ab2e101b396fc5055b
|
|
| MD5 |
5ab15e569ccdb009db7ba460d17bcdb7
|
|
| BLAKE2b-256 |
338f0bcf51e5f1f206be2e6d5c5a1bd219614c84d30396855b52aa343a5646dc
|