package Ġio . github . slo th Labs . mail . imap Ċ Ċ import Ġcom . sun . mail . imap . I MAP Folder Ċ import Ġjava . io . Closeable Ċ import Ġjava . util . Properties Ċ import Ġjavax . mail . Session Ċ import Ġjavax . mail . Store Ċ import Ġjavax . mail . Message Ġas ĠMail Message Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġperforming Ġbasic ĠI MAP Ġaccess Ġfunctionality . Ċ Ġ*/ Ċ class ĠI map Ġinternal Ġconstructor ( private Ġval Ġstore : ĠStore ): ĠClose able , ĠAuto Closeable Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġthe Ġsession Ġand Ġdisconnect s Ġfrom Ġthe ĠI MAP Ġserver . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġstore . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOpen s Ġthe Ġspecified Ġfolder , Ġwith Ġthe Ġspecified Ġmode , Ġapplies Ġthe Ġgiven ĊĠĠĠĠ Ġ* Ġaction Ġto Ġit , Ġand Ġcloses Ġthe Ġfolder Ġon Ġexit . ĠTwo Ġkey Ġthings Ġto Ġnote : ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ 0 . ĠThe Ġfolder Ġis Ġclosed Ġwithout Ġexp un ging Ġany Ġdeleted Ġmessages . ĠIf Ġthis Ġis Ġneeded , ĊĠĠĠĠ Ġ* ĠĠĠ Ġyou Ġmust Ġmanually Ġexp unge Ġdeleted Ġmessages Ġin Ġyour Ġaction . ĊĠĠĠĠ Ġ* Ġ 0 . ĠUnless Ġyou Ġexplicitly Ġpre - f etched Ġany Ġmessages Ġretrieved , Ġthey Ġwill Ġnot Ġbe ĊĠĠĠĠ Ġ* ĠĠĠ Ġaccessible Ġoutside Ġof Ġyour Ġaction Ġmethod Ġ( i . e . Ġrequesting Ġany Ġproperty Ġon ĊĠĠĠĠ Ġ* ĠĠĠ Ġthem Ġwill Ġthrow Ġa Ġ` Folder Closed Exception `). ĠThis Ġis Ġin herent Ġin ĠJava Mail ; ĊĠĠĠĠ Ġ* ĠĠĠ Ġmost Ġmessage Ġproperties Ġare Ġlazy - loaded , Ġmeaning Ġthey Ġmake Ġan Ġadditional ĊĠĠĠĠ Ġ* ĠĠĠ Ġcall Ġto Ġthe ĠI MAP Ġserver Ġthe Ġfirst Ġtime Ġthey 're Ġrequested . ĠWhen Ġthe Ġfolder ĊĠĠĠĠ Ġ* ĠĠĠ Ġis Ġclosed , Ġthey Ġcan 't Ġmake Ġthat Ġcall , Ġand Ġblow Ġup Ġon Ġyou . ĠYou Ġcan Ġeither ĊĠĠĠĠ Ġ* ĠĠĠ Ġensure Ġyou Ġdo Ġeverything Ġyou Ġneed Ġto Ġdo Ġwith Ġin Ġyour Ġaction , Ġand / or Ġuse ĊĠĠĠĠ Ġ* ĠĠĠ Ġ[ Folder . pre Fetch By ] Ġto Ġpre - fetch Ġmessage Ġdata Ġ( using Ġboth Ġis Ġhighly Ġrecommended ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġthe Ġname Ġof Ġthe Ġfolder Ġto Ġopen . ĊĠĠĠĠ Ġ* Ġ@ param Ġmode Ġthe Ġmode Ġto Ġopen Ġthe Ġfolder Ġin . ĊĠĠĠĠ Ġ* Ġ@ param Ġaction Ġthe Ġaction Ġto Ġperform Ġagainst Ġthe Ġfolder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfolder ( name : ĠString , Ġmode : ĠFolder Modes , Ġexp unge : ĠBoolean Ġ= Ġfalse , Ġaction : ĠFolder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġim ap Folder Ġ= Ġstore . get Folder ( name ) Ġas ĠI MAP Folder ĊĠĠĠĠĠĠĠ Ġim ap Folder . open ( mode . to Java Mail Mode ()) ĊĠĠĠĠĠĠĠ Ġval Ġthe Folder Ġ= ĠFolder ( imap Folder ) ĊĠĠĠĠĠĠĠ Ġthe Folder . action () ĊĠĠĠĠĠĠĠ Ġthe Folder . close ( exp unge ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġbasic ĠI MAP Ġconnectivity Ġinformation . Ċ Ġ*/ Ċ data Ġclass ĠConnection Information ( ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġhost Ġto Ġconnect Ġto . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġhost : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġport Ġto Ġconnect Ġto . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġport : ĠInt , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġuser Ġname Ġto Ġconnect Ġwith . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġuser : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġpassword Ġto Ġconnect Ġwith . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġpassword : ĠString ) Ċ Ċ /** Ċ Ġ* ĠConnect s Ġto Ġan ĠI MAP Ġserver Ġusing Ġthe Ġspecified Ġconnection Ġinformation Ġand Ġproperties , Ġand Ġperforms Ġthe Ġgive Ġaction Ċ Ġ* Ġagainst Ġit . ĠGeneral Ġusage Ġwould Ġbe : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠĠĠ Ġval Ġhost Ġ= Ġ" my . imap . host " Ċ Ġ* ĠĠĠĠ Ġval Ġport Ġ= Ġ 1 4 3 Ċ Ġ* ĠĠĠĠ Ġval Ġuser Ġ= Ġ" some one @ some where . net " Ċ Ġ* ĠĠĠĠ Ġval Ġpassword Ġ= Ġ" hack me ify ou can " Ċ Ġ* ĠĠĠĠ Ġim ap ( host , Ġport , Ġuser , Ġpassword ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġfolder (" IN BOX ", ĠFolder Modes . ReadOnly ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġsomething Ġawesome ly Ġemail ish Ġhere . Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġhost Ġthe Ġhost Ġto Ġconnect Ġto Ċ Ġ* Ġ@ param Ġport Ġthe Ġport Ġto Ġconnect Ġto Ċ Ġ* Ġ@ param Ġuser Ġthe Ġuser Ġname Ġto Ġconnect Ġwith Ċ Ġ* Ġ@ param Ġpassword Ġthe Ġpassword Ġto Ġconnect Ġwith Ċ Ġ* Ġ@ param Ġprops Ġthe Ġproperties Ġto Ġpass Ġto Ġthe ĠJava Mail Ġstore Ċ Ġ* Ġ@ param Ġaction Ġthe Ġaction Ġto Ġperform Ġagainst Ġthe ĠI MAP Ġserver . Ċ Ġ*/ Ċ fun Ġim ap ( host : ĠString , Ġport : ĠInt , Ġuser : ĠString , Ġpassword : ĠString , Ġprops : ĠProperties Ġ= ĠProperties (), Ġaction : ĠI map . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġsession Ġ= ĠSession . getInstance ( props ) ĊĠĠĠ Ġval Ġstore Ġ= Ġsession . get Store (" imap ") ĊĠĠĠ Ġstore . connect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword ĊĠĠĠ Ġ) ĊĠĠĠ ĠI map ( store ). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . action () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠConnect s Ġto Ġan ĠI MAP Ġserver Ġusing Ġthe Ġspecified Ġconnection Ġinformation Ġand Ġproperties , Ġand Ġperforms Ġthe Ġgive Ġaction Ċ Ġ* Ġagainst Ġit . ĠGeneral Ġusage Ġwould Ġbe : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠĠĠ Ġval Ġhost Ġ= Ġ" my . imap . host " Ċ Ġ* ĠĠĠĠ Ġval Ġport Ġ= Ġ 1 4 3 Ċ Ġ* ĠĠĠĠ Ġval Ġuser Ġ= Ġ" some one @ some where . net " Ċ Ġ* ĠĠĠĠ Ġval Ġpassword Ġ= Ġ" hack me ify ou can " Ċ Ġ* ĠĠĠĠ Ġval Ġconnection Info Ġ= ĠConnection Information ( host , Ġport , Ġuser , Ġpassword ) Ċ Ġ* ĠĠĠĠ Ġim ap ( connection Info ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġfolder (" IN BOX ", ĠFolder Modes . ReadOnly ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġsomething Ġawesome ly Ġemail ish Ġhere . Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġconnection Information Ġthe Ġ[ Connection Information ] Ġto Ġconnect Ġwith Ċ Ġ* Ġ@ param Ġprops Ġthe Ġproperties Ġto Ġpass Ġto Ġthe ĠJava Mail Ġstore Ċ Ġ* Ġ@ param Ġaction Ġthe Ġaction Ġto Ġperform Ġagainst Ġthe ĠI MAP Ġserver . Ċ Ġ*/ Ċ fun Ġim ap ( connection Information : ĠConnection Information , Ġprops : ĠProperties Ġ= ĠProperties (), Ġaction : ĠI map . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġsession Ġ= ĠSession . getInstance ( props ) ĊĠĠĠ Ġval Ġstore Ġ= Ġsession . get Store (" imap ") ĊĠĠĠ Ġstore . connect ( connection Information ) ĊĠĠĠ ĠI map ( store ). use Ġ{ ĊĠĠĠĠĠĠĠ Ġit . action () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠUtility Ġextension Ġto Ġallow Ġconnecting Ġa ĠJava Mail Ġstore Ġinstance Ġusing Ġa Ġ[ Connection Information ] Ċ Ġ* Ġinstance . Ċ Ġ* Ċ Ġ* Ġ@ param Ġconnection Information Ġthe Ġ[ Connection Information ] Ġto Ġconnect Ġwith . Ċ Ġ*/ Ċ fun ĠStore . connect ( connection Information : ĠConnection Information ) Ġ= Ġconnect ( ĊĠĠĠĠĠĠĠ Ġconnection Information . host , ĊĠĠĠĠĠĠĠ Ġconnection Information . port , ĊĠĠĠĠĠĠĠ Ġconnection Information . user , ĊĠĠĠĠĠĠĠ Ġconnection Information . password Ċ )