package Ġcom . fs ck . k 9 . aut od is covery . srv records Ċ Ċ import Ġcom . fs ck . k 9 . aut od is covery . Connection Settings Ċ import Ġcom . fs ck . k 9 . aut od is covery . Connection Settings Discovery Ċ import Ġcom . fs ck . k 9 . helper . Email Helper Ċ import Ġcom . fs ck . k 9 . mail . Auth Type Ċ import Ġcom . fs ck . k 9 . mail . Connection Security Ċ import Ġcom . fs ck . k 9 . mail . Server Settings Ċ Ċ class ĠS rv Service Discovery ( ĊĠĠĠ Ġprivate Ġval Ġsrv Resolver : ĠMini Dns Srv Resolver Ċ ) Ġ: ĠConnection Settings Discovery Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdiscover ( email : ĠString ): ĠConnection Settings ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdomain Ġ= ĠEmail Helper . get Domain From EmailAddress ( email ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġpick Mail Service Ġ= Ġcompare By < Mail Service > Ġ{ Ġit . priority Ġ}. then By Descending Ġ{ Ġit . security Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutgoing Service Ġ= ĠlistOf ( Srv Type . SUB MISSION S , ĠS rv Type . SUB MISSION ). flatMap Ġ{ Ġsrv Resolver . lookup ( domain , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. min With ( pick Mail Service ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġincoming Service Ġ= ĠlistOf ( Srv Type . I MA PS , ĠS rv Type . I MAP ). flatMap Ġ{ Ġsrv Resolver . lookup ( domain , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. min With ( pick Mail Service ) Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn ĠConnection Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Ġ= ĠServer Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Service . srv Type . protocol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Service . host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Service . port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincoming Service . security , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . PLAIN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing Ġ= ĠServer Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing Service . srv Type . protocol , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing Service . host , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing Service . port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutgoing Service . security , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Type . PLAIN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠS rv Type ( val Ġlabel : ĠString , Ġval Ġprotocol : ĠString , Ġval Ġassume Tls : ĠBoolean ) Ġ{ ĊĠĠĠ ĠSUB MISSION S ("_ submissions ", Ġ" smtp ", Ġtrue ), ĊĠĠĠ ĠSUB MISSION ("_ submission ", Ġ" smtp ", Ġfalse ), ĊĠĠĠ ĠI MA PS ("_ im aps ", Ġ" imap ", Ġtrue ), ĊĠĠĠ ĠI MAP ("_ imap ", Ġ" imap ", Ġfalse ) Ċ } Ċ Ċ data Ġclass ĠMail Service ( ĊĠĠĠ Ġval Ġsrv Type : ĠS rv Type , ĊĠĠĠ Ġval Ġhost : ĠString , ĊĠĠĠ Ġval Ġport : ĠInt , ĊĠĠĠ Ġval Ġpriority : ĠInt , ĊĠĠĠ Ġval Ġsecurity : ĠConnection Security ? Ċ ) Ċ