LibreMail is an offline-first Android email client. IMAP is currently connect-per-operation (connection reuse, issue #125, is OFF by default); full-history backfill (issue #12) prefetches message bodies + attachments on unmetered networks (default FetchPolicy.WIFI_ONLY). A perf drilldown found this opens roughly 1 + K + attachments separate authenticated connections per backfill page, saturating a provider's connection/bandwidth budget and starving interactive message-opens. These tickets track making LibreMail's connection/request patterns and data usage respect each major provider's documented limits and degrade gracefully under throttling. (Outlook/Hotmail uses the Microsoft Graph REST API; Gmail, Yahoo/AOL, and iCloud use IMAP/SMTP.)
Documented limits
10,000 REST requests per 10-minute window (per App ID + mailbox).
Max 4 concurrent requests -> 429 if exceeded.
150 MB uploaded per rolling 5-minute window.
Attachments over 4 MB require chunked createUploadSession.
SendMail: 300 recipients/day, velocity cap 30 messages/minute.
Up to 20 operations per $batch.
$top=1000 max OData page size.
Optimization levers
Cap Graph concurrency at 4 or fewer.
Multiplex reads via $batch (at most 20 ops).
Honor Retry-After on 429.
Chunked createUploadSession for attachments over 4 MB.
Paginate at $top=1000.
Respect the 30 msg/min send velocity.
Depends on
Depends on / see the throttling-backoff umbrella issue #360.
## Context
LibreMail is an offline-first Android email client. IMAP is currently connect-per-operation (connection reuse, issue #125, is OFF by default); full-history backfill (issue #12) prefetches message bodies + attachments on unmetered networks (default `FetchPolicy.WIFI_ONLY`). A perf drilldown found this opens roughly `1 + K + attachments` separate authenticated connections per backfill page, saturating a provider's connection/bandwidth budget and starving interactive message-opens. These tickets track making LibreMail's connection/request patterns and data usage respect each major provider's documented limits and degrade gracefully under throttling. (Outlook/Hotmail uses the Microsoft Graph REST API; Gmail, Yahoo/AOL, and iCloud use IMAP/SMTP.)
## Documented limits
- 10,000 REST requests per 10-minute window (per App ID + mailbox).
- Max 4 concurrent requests -> 429 if exceeded.
- 150 MB uploaded per rolling 5-minute window.
- Attachments over 4 MB require chunked `createUploadSession`.
- SendMail: 300 recipients/day, velocity cap 30 messages/minute.
- Up to 20 operations per `$batch`.
- `$top=1000` max OData page size.
## Optimization levers
- Cap Graph concurrency at 4 or fewer.
- Multiplex reads via `$batch` (at most 20 ops).
- Honor `Retry-After` on 429.
- Chunked `createUploadSession` for attachments over 4 MB.
- Paginate at `$top=1000`.
- Respect the 30 msg/min send velocity.
## Depends on
Depends on / see the throttling-backoff umbrella issue #360.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
LibreMail is an offline-first Android email client. IMAP is currently connect-per-operation (connection reuse, issue #125, is OFF by default); full-history backfill (issue #12) prefetches message bodies + attachments on unmetered networks (default
FetchPolicy.WIFI_ONLY). A perf drilldown found this opens roughly1 + K + attachmentsseparate authenticated connections per backfill page, saturating a provider's connection/bandwidth budget and starving interactive message-opens. These tickets track making LibreMail's connection/request patterns and data usage respect each major provider's documented limits and degrade gracefully under throttling. (Outlook/Hotmail uses the Microsoft Graph REST API; Gmail, Yahoo/AOL, and iCloud use IMAP/SMTP.)Documented limits
createUploadSession.$batch.$top=1000max OData page size.Optimization levers
$batch(at most 20 ops).Retry-Afteron 429.createUploadSessionfor attachments over 4 MB.$top=1000.Depends on
Depends on / see the throttling-backoff umbrella issue #360.