fix: decode RFC2047 subjects, OR TO/FROM in to-mode query, tz-aware Date, drop LIST completion line (v0.1.7)
Subject headers were matched/scanned raw (never RFC2047-decoded), so any provider that base64/quoted-printable encodes non-ASCII subjects silently failed subject filtering and code extraction. match_field='to' only server-queried TO, so an older TO-matching message permanently hid a forwarded-From match the client-side check was documented to accept. _age_seconds treated a naive datetime (from a "-0000" Date header) as local time instead of UTC, corrupting max_age freshness on non-UTC hosts. get_folders appended aioimaplib's tagged LIST completion text as a phantom folder name on every call against any RFC-compliant server. Also corrects __init__.py's __version__, which was left at 0.1.5 through the 0.1.6 release. Signed-off-by: disqualifier <dev@disqualifier.me>
This commit is contained in:
@@ -11,22 +11,22 @@ This reads codes from email; it does not generate them (that is `pyotp`'s job).
|
||||
`requirements.txt`:
|
||||
|
||||
```
|
||||
aiomail @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.6
|
||||
aiomail @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.7
|
||||
# OAuth token providers (Microsoft / Google) need the extra:
|
||||
aiomail[oauth] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.6
|
||||
aiomail[oauth] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.7
|
||||
```
|
||||
|
||||
Direct:
|
||||
|
||||
```bash
|
||||
pip install "aiomail @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.6"
|
||||
pip install "aiomail[oauth] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.6"
|
||||
pip install "aiomail @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.7"
|
||||
pip install "aiomail[oauth] @ git+ssh://git@git.rethinkstudios.io/rethink-public/aiomail.git@v0.1.7"
|
||||
```
|
||||
|
||||
Requires `aioimaplib` and `beautifulsoup4` (pulled transitively). The `oauth`
|
||||
extra adds `aiohttp` for the refresh-token providers.
|
||||
|
||||
Drop the `@v0.1.6` suffix from the line above to install the latest unpinned.
|
||||
Drop the `@v0.1.7` suffix from the line above to install the latest unpinned.
|
||||
|
||||
## Password auth
|
||||
|
||||
@@ -66,6 +66,9 @@ await retrieve_otp(client, sender=re.compile(r"no-?reply@.*\.io")) # regex
|
||||
await retrieve_otp(client, sender=lambda f: f.endswith("@x.com")) # callable
|
||||
```
|
||||
|
||||
Subject headers are RFC2047-decoded before matching/extraction, so providers
|
||||
that encode non-ASCII subjects (`=?utf-8?B?...?=`) still match on plain text.
|
||||
|
||||
Code extraction is tunable too — `patterns` (regexes, first group wins) and
|
||||
`lengths` (standalone digit-run fallback):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user