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.8.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.8-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file better_imap-1.4.8.tar.gz.

File metadata

  • Download URL: better_imap-1.4.8.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.8.tar.gz
Algorithm Hash digest
SHA256 52e7c2fcd3bfcaef336f12b5b53ec6dba4becf77654321f19f3566cdf7b84d8b
MD5 191ebba850ec2c2a3f08c42d3df6aaee
BLAKE2b-256 7c4218bcaa724afb4ef12d0dc630028ed846f7219e37f053f3c0f701140d367d

See more details on using hashes here.

File details

Details for the file better_imap-1.4.8-py3-none-any.whl.

File metadata

  • Download URL: better_imap-1.4.8-py3-none-any.whl
  • Upload date:
  • Size: 16.1 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.8-py3-none-any.whl
Algorithm Hash digest
SHA256 9a7d2aa2ed54cb154813caf4ea85c28e374a33b38e9c52559efe442d73718d05
MD5 395a183aa79df4ca1eabd5051aa40137
BLAKE2b-256 5d74a4f2583ddf8596dcaf0887ef5cc590398c1b9aa881853f310a47aa1d8cb6

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