Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

better_imap-1.4.7.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

better_imap-1.4.7-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

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

Hashes for better_imap-1.4.7.tar.gz
Algorithm Hash digest
SHA256 2a7f67d91411df59f318010df4024bcde0f9fbca534e9a529c54b960719cc76c
MD5 2fc16a69c905f687d61427cf01017a1a
BLAKE2b-256 b4c9d80119523ce5c36ac05e835d13e5cd7d54b365a741e2a473157ff0880e8c

See more details on using hashes here.

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

Hashes for better_imap-1.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 10adb5e9243086b38eeeb3afe599388b1f29c066d82843ab2e101b396fc5055b
MD5 5ab15e569ccdb009db7ba460d17bcdb7
BLAKE2b-256 338f0bcf51e5f1f206be2e6d5c5a1bd219614c84d30396855b52aa343a5646dc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page