JavaMail

import java.util.Properties
import java.security.Security
import javax.mail.URLName
import javax.mail.Session
import javax.mail.Store
import javax.mail.Folder
import javax.mail.search.FlagTerm
import javax.mail.Flags
import javax.mail.Message
import javax.mail.NoSuchProviderException
import javax.mail.AuthenticationFailedException
import javax.mail.MessagingException
import com.sun.net.ssl.internal.ssl.Provider

val props = new Properties
Security.addProvider(new Provider)
props.setProperty("mail.pop3.socketFactory.class","javax.net.ssl.SSLSocketFactory")
props.setProperty("mail.pop3.socketFactory.fallback","false")
val protocol = "pop3s"
val urln = new URLName(protocol,
     "pop.gmail.com",
     995,
     null,
     "メールアドレス",
     "パスワード")

val session = Session.getDefaultInstance(props,null)
var store:Store = null
var folder:Folder = null
try {
  store = session.getStore(urln)
  store.connect
  folder = store.getFolder("INBOX")
  folder.open(Folder.READ_WRITE) // 既読Flagの都合上、READ_ONLYではだめ
  val unread = new FlagTerm(new Flags(Flags.Flag.SEEN), false)
  val totalMessages = folder.getMessageCount
  val messages:Array[Message] = folder.search(unread)

  for (msg <- messages) {
    println(msg.getSubject)
    msg.setFlag(Flags.Flag.SEEN, true) // 既読Flagを付ける
  }
  folder.close(false) // DELETEフラグのついてるMessageを削除しないでclose
} catch {
  case e:NoSuchProviderException => e.printStackTrace
  case e:AuthenticationFailedException => e.printStackTrace
  case e:MessagingException => e.printStackTrace
} finally {
  try {
    if (store != null) {
      store.close
    }
  } catch {
    case e:MessagingException => e.printStackTrace
  }
}