The app-password vendors (Gmail, Yahoo, iCloud) need preconfigured IMAP/SMTP settings so
the user only supplies an email + app password. Today only Outlook is preconfigured, via
the Account.outlook(...) factory. This ticket adds a small provider registry the picker
(#27) and the app-password screen (#29) read from.
Scope
Add a provider registry / factories (mirroring Account.outlook) for Gmail, Yahoo, and iCloud, each supplying IMAP + SMTP host/port and MailSecurity.
Bias toward STARTTLS where supported per the spec; keep implicit SSL/TLS where
that's the provider's documented/only option. Never use MailSecurity.NONE. Record
the rationale for each port/security choice in a comment.
For each provider include: display name, the app-password help URL, and the
user-facing explanation copy used by #29.
Unit tests asserting host/port/security for each provider (these are easy to get
subtly wrong and painful to debug on-device).
Starting values to verify against current vendor docs:
new: provider registry under domain/model (+ test under app/src/test/...)
Dependencies
Blocks #29 (needs presets + help copy) and #27 (picker routes to presets).
Part of #9.
## Context
The app-password vendors (Gmail, Yahoo, iCloud) need preconfigured IMAP/SMTP settings so
the user only supplies an email + app password. Today only Outlook is preconfigured, via
the `Account.outlook(...)` factory. This ticket adds a small provider registry the picker
(#27) and the app-password screen (#29) read from.
## Scope
- [ ] Add a provider registry / factories (mirroring `Account.outlook`) for **Gmail**,
**Yahoo**, and **iCloud**, each supplying IMAP + SMTP host/port and `MailSecurity`.
- [ ] **Bias toward STARTTLS where supported** per the spec; keep implicit SSL/TLS where
that's the provider's documented/only option. Never use `MailSecurity.NONE`. Record
the rationale for each port/security choice in a comment.
- [ ] For each provider include: display name, the **app-password help URL**, and the
user-facing explanation copy used by #29.
- [ ] Unit tests asserting host/port/security for each provider (these are easy to get
subtly wrong and painful to debug on-device).
Starting values to verify against current vendor docs:
| Provider | IMAP | SMTP | App-password page |
|---|---|---|---|
| Gmail | imap.gmail.com:993 SSL/TLS | smtp.gmail.com:587 STARTTLS | myaccount.google.com/apppasswords |
| Yahoo | imap.mail.yahoo.com:993 SSL/TLS | smtp.mail.yahoo.com:465 SSL/TLS (587 STARTTLS) | login.yahoo.com/account/security -> App passwords |
| iCloud | imap.mail.me.com:993 SSL/TLS | smtp.mail.me.com:587 STARTTLS | support.apple.com/en-us/102654 (appleid.apple.com -> App-Specific Passwords) |
## Acceptance criteria
- Each provider resolves to a valid `Account` (via factory/registry) with the correct
server config and an app-password help URL.
- Unit tests cover all three providers and pass under `:app:testDebugUnitTest`.
## Relevant files
- `app/src/main/kotlin/org/libremail/domain/model/Account.kt` (`Account.outlook` pattern)
- `app/src/main/kotlin/org/libremail/domain/model/{ServerConfig,MailSecurity}.kt`
- new: provider registry under `domain/model` (+ test under `app/src/test/...`)
## Dependencies
Blocks #29 (needs presets + help copy) and #27 (picker routes to presets).
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.
Part of #9.
Context
The app-password vendors (Gmail, Yahoo, iCloud) need preconfigured IMAP/SMTP settings so
the user only supplies an email + app password. Today only Outlook is preconfigured, via
the
Account.outlook(...)factory. This ticket adds a small provider registry the picker(#27) and the app-password screen (#29) read from.
Scope
Account.outlook) for Gmail,Yahoo, and iCloud, each supplying IMAP + SMTP host/port and
MailSecurity.that's the provider's documented/only option. Never use
MailSecurity.NONE. Recordthe rationale for each port/security choice in a comment.
user-facing explanation copy used by #29.
subtly wrong and painful to debug on-device).
Starting values to verify against current vendor docs:
Acceptance criteria
Account(via factory/registry) with the correctserver config and an app-password help URL.
:app:testDebugUnitTest.Relevant files
app/src/main/kotlin/org/libremail/domain/model/Account.kt(Account.outlookpattern)app/src/main/kotlin/org/libremail/domain/model/{ServerConfig,MailSecurity}.ktdomain/model(+ test underapp/src/test/...)Dependencies
Blocks #29 (needs presets + help copy) and #27 (picker routes to presets).