the clean lib matched senders by From only; the original imap_tool.py matched primarily by TO (the per-user alias the code was sent to) with a HEADER FROM forwarded fallback. added match_field="from"|"to" to retrieve_otp: "from" (default) is byte-identical to current behavior, "to" searches TO primary and accepts a forwarded From match, restoring the alias flow. server query + client-side predicate both honor it. bump to v0.1.2. Signed-off-by: disqualifier <dev@disqualifier.me>
1.2 KiB
1.2 KiB
aiomail — ledger
v0.1.2
- fidelity capability (non-breaking): added
match_field="from"|"to"toretrieve_otp."from"(default) is the current behavior, byte-identical — matches the sender address."to"matches the recipient address (the per-user alias the code was sent to) primary, and additionally accepts a forwarded match on the From header, restoring the originalimap_tool.pyrecipient-primary matching for alias flows. The server query buildsTO "..."(vsFROM "...") and the client-side predicate checks the To header (with the From fallback) accordingly.
v0.1.1
- XOAUTH2 token is str, not bytes: aioimaplib f-string-interpolates the token into
the SASL string, so a bytes token injected a
b'...'repr and broke every login. Dropped the.encode(). (A false CLAUDE.md "bytes required" note had propagated this.) - tolerant SEARCH parse (skip non-numeric tokens instead of crashing the whole search).
connect()logs out the IMAP object on a failed attempt (was a socket leak); moved theasyncioimport inoauth.pyto module top.
v0.1.0
- initial: async IMAP one-time-code retrieval; password + XOAUTH2 auth, dynamic sender/subject/code matching via flexible match specs.