package Ġpw . bin om . smtp Ċ Ċ import Ġpw . bin om . io . Async Closeable Ċ import Ġpw . bin om . io . socket . ssl . async Channel Ċ import Ġpw . bin om . network . Network Address Ċ import Ġpw . bin om . network . Network Dispatcher Ċ import Ġpw . bin om . ssl . Key Manager Ċ import Ġpw . bin om . ssl . SSL Context Ċ import Ġpw . bin om . ssl . SSL Method Ċ import Ġpw . bin om . ssl . Trust Manager Ċ Ċ interface ĠSMTP Client Ġ: ĠAsync Closeable Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates ĠSMTP Ġclient Ġwithout ĠTLS ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġtcp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher : ĠNetwork Dispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Email : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress : ĠNetwork Address ĊĠĠĠĠĠĠĠ Ġ): ĠSMTP Client Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnect Ġ= Ġdispatcher . tcp Connect ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠBase SMTP Client ( connect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . start ( send From Domain Ġ= Ġfrom Email , Ġlogin Ġ= Ġlogin , Ġpassword Ġ= Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . async Close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates ĠTLS ĠSMTP ĠClient ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġtls ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher : ĠNetwork Dispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Email : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress : ĠNetwork Address , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Manager : ĠKey Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrust Manager : ĠTrust Manager , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtls Host : ĠString Ġ= Ġaddress . host , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtls Port : ĠInt Ġ= Ġaddress . port , ĊĠĠĠĠĠĠĠ Ġ): ĠSMTP Client Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnect Ġ= Ġdispatcher . tcp Connect ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġssl Context Ġ= ĠSSL Context . getInstance ( SSL Method . TLS v 1 _ 2 , Ġkey Manager , Ġtrust Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Session Ġ= Ġssl Context . client Session ( tls Host , Ġtls Port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġssl Connect Ġ= Ġclient Session . async Channel ( connect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠBase SMTP Client ( ssl Connect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . start ( send From Domain Ġ= Ġfrom Email , Ġlogin Ġ= Ġlogin , Ġpassword Ġ= Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . async Close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġmultipart ( ĊĠĠĠĠĠĠĠ Ġfrom : ĠString , ĊĠĠĠĠĠĠĠ Ġfrom Alias : ĠString ?, ĊĠĠĠĠĠĠĠ Ġto : ĠString , ĊĠĠĠĠĠĠĠ Ġto Alias : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsubject : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmsg : Ġsuspend Ġ( Html Multipart Message ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ċ }