Skip to content

Instantly share code, notes, and snippets.

@ahoy-jon
Created December 5, 2011 07:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahoy-jon/1432765 to your computer and use it in GitHub Desktop.
Save ahoy-jon/1432765 to your computer and use it in GitHub Desktop.
Test de connexion IMAP en Scala avec Javax.Mail

Utilisation

Le fichier de build (build.sbt) utilise sbt 0.11.x : https://github.com/harrah/xsbt/wiki

Une fois sbt installé et dans le path, il suffit de créer un répertoire comme ceci:

  • ImapTest
    • build.sbt
    • src
      • ImapTest.scala

et dans lancer sbt depuis le répertoire ImapTest. Une fois dans le mode interactif de sbt, il suffit de lancer la commande run.

name := "imap-test"
resolvers += JavaNet1Repository
// pour pouvoir mettre les fichiers Scala directement dans /src et non dans /src/main/scala
scalaSource in Compile <<= baseDirectory(_ / "src")
libraryDependencies += "javax.mail" % "mail" % "1.4.4"
package imaptest
import javax.mail._
object ImapTest extends App {
val props = System.getProperties()
props.setProperty("mail.store.protocol", "imaps")
try {
val session = Session.getDefaultInstance(props, null)
val store = session.getStore("imaps")
store.connect("imap.gmail.com", "<login>@gmail.com", "<password>") //TODO : Store Password, in text files.
val rootFolder = store.getDefaultFolder
//Fonction pour récupérer tous les dossiers d'un dossier sous forme de liste de Dossier.
val childs:(Folder => List[Folder]) = (f: Folder) => f.list("*").toList
//Méthode pour imprimer l'arbre des dossiers à partir d'un dossier.
def printChild(f: Folder): Unit = {
printChildWithDeep(f: Folder, 0)
}
//"" avec la notion de profondeur.
def printChildWithDeep(f: Folder, deep: Int): Unit = {
println((" " * deep) + f.getFullName)
printFirstMessage(f)
childs(f).map {
(f: Folder) => printChildWithDeep(f, deep + 1)
}
}
printChild(rootFolder)
def printFirstMessage(f:Folder) : Unit = {
try {
f.open(1)
val c = f.getMessageCount
if(c> 1 ) {
println(f.getMessage(1).getContentType)
f.getMessage(1).getContent match {
case s:String => println(s)
case m:Multipart => println("MULTIPART !")
case a:AnyRef => println(a)
}
}
} catch {case e: Exception => e.printStackTrace()}
}
} catch {
//TODO: Il faut gérer les deux execptions classiques : MessagingException et NoSuchProviderException
case e => e.printStackTrace()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment