- Scala library wrapping javax.mail for reading and sending emails with simple APIs.
- Utilizing Typesafe config, within which javax.mail properties are directly set.
- Support parallel sending.
- Multiple password providing strategies.
- Current support sending text mail and reading mime(through parse mime object).
- Includes BatchMailTool, a simple cmd tool for sending batch mails.(See below)
Built against scala 2.11, dependencies: build.sbt
Resolver:
resolvers += "bintray-cuzfrog-maven" at "http://dl.bintray.com/cuzfrog/maven"
Artifact:
libraryDependencies += "com.github.cuzfrog" %% "maila" % "lastest-version"
Necessary configs are listed below:
maila {
server {
mail.pop3s.host = "some host"
mail.smtps.host = "some host"
}
#not really necessary, see below: password providing strategies.
authentication {
#user = Cause
#password = "some crypt"
}
}
Default with documentation reference.conf Typical and for-testing application.conf
Different config source can be used, see Typesafe config
Config can be hot reloaded with Maila.reloadConfig
,after which new instances will be created with new config.
import com.github.cuzfrog.maila.{Mail, Maila}
val maila = Maila.newInstance(askUser = "[email protected]" ,askPassword = "pw")
val mail = Mail(List("[email protected]"), "subject", "text content")
maila.send(List(mail))
maila.send(List(mail),isParallel = true) //sending every mail in Future.
import com.github.cuzfrog.maila.{MailFilter, Maila}
val maila = Maila.newInstance(askUser = "[email protected]" ,askPassword = "pw")
val mails1 = maila.read() //get a List of mails using default filter.
val filter = MailFilter(
maxSearchAmount = 30,
filter = _.subject.contains("myKeyWord")
)
val mails2 = maila.read(filter) //get a List of mails
mails2.foreach(m => println(m.contentText)) //print text content
-
Supply user and password directly:
Maila.newInstance(askUser = "[email protected]" ,askPassword = "pw")
-
Plain text in config file(forbidden by default):
Set
allow-none-encryption-password = true
in config.//System.setProperty("config.resource", "imap.conf") //if necessary. //Everytime an instance created, property cache is invalidated. Maila.newInstance(askUser = "[email protected]") //if cannot find password in config, fails later. Maila.newInstance() //assume user can be found in config as well.
-
Encrypted password in config file:
Encryption uses AES method. You need to provide a finite seq of 128/192/256bit keys. Password string is in form of Base64. You can use Batch mail tool described below to generate key and encrypt password.
val AESkey = "JYFi0VFzoUNZxLyj".getBytes("utf8") Maila.newInstance(AESkey) //try to decrypt password in config with the AES key.
-
Call-by-name mode, ask password when running.
val console = System.console() def _askPassword = console.readPassword().mkString Maila.newInstance(askUser = "[email protected]",askPassword=_askPassword) //user can be lazy evaluated also.
This project includes a simple cmd tool for sending batch mails. Acquire binary from:
- Release: Download
- Build: run sbt
>batchMailTool/assembly
, which, in addition, will generate the windows bat file pointing to the current version.
- add java to PATH.
- alter provided config file.
>bmt -help
you can have all instructions.
>bmt send -m:./mails.csv
extra args:
-password:
if emitted, it will prompt and ask user to type in.-key:
if specified,-password
will be ignored, bmt tries to decrypt pw from config file.
File structure should be like this:(head line cannot be emitted.)
to | subject | text |
---|---|---|
[email protected] | Greet | tt1 |
[email protected] | Hello | tt2 |
etc | etc | etc |
-
Text content has been de-escaped, which means you can define whole text of the email like:
I will be ok if there are spaces. "If there is comma, I must be quoted." "First line.\nSecond line." "This is just one line with a double quote: \" and a special sign: \\n."
*File will be loaded completely before sending.
Change delimiter(csv files use comma), encoding, head definition in config file: reference.conf
>bmt encrypt -pw:myPassword
will print encrypted password with randomly generated key. Use-help
to see more.
In config file:
maila {
#When set to true, exception stacktrace will be printed.
debug = false
}