Skip to main content

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)

Source distribution for better-imap 1.4.8
File Size Uploaded
better_imap-1.4.8.tar.gz 15.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for better-imap 1.4.8
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.4.8 This release

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.9

2 release files

1.3.8

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page