gitbucket.core.util.Mailer.scala Maven / Gradle / Ivy
The newest version!
package gitbucket.core.util
import gitbucket.core.model.Account
import gitbucket.core.service.SystemSettingsService
import org.apache.commons.mail.{DefaultAuthenticator, HtmlEmail}
import SystemSettingsService.SystemSettings
class Mailer(settings: SystemSettings) {
def send(
to: String,
subject: String,
textMsg: String,
htmlMsg: Option[String] = None,
loginAccount: Option[Account] = None
): Unit = {
createMail(subject, textMsg, htmlMsg, loginAccount).foreach { email =>
email.addTo(to).send
}
}
def sendBcc(
bcc: Seq[String],
subject: String,
textMsg: String,
htmlMsg: Option[String] = None,
loginAccount: Option[Account] = None
): Unit = {
createMail(subject, textMsg, htmlMsg, loginAccount).foreach { email =>
bcc.foreach { address =>
email.addBcc(address)
}
email.send()
}
}
def createMail(
subject: String,
textMsg: String,
htmlMsg: Option[String] = None,
loginAccount: Option[Account] = None
): Option[HtmlEmail] = {
if (settings.basicBehavior.notification) {
settings.smtp.map { smtp =>
val email = new HtmlEmail
email.setHostName(smtp.host)
email.setSmtpPort(smtp.port.get)
smtp.user.foreach { user =>
email.setAuthenticator(new DefaultAuthenticator(user, smtp.password.getOrElse("")))
}
smtp.ssl.foreach { ssl =>
email.setSSLOnConnect(ssl)
if (ssl) {
email.setSslSmtpPort(smtp.port.get.toString)
}
}
smtp.starttls.foreach { starttls =>
email.setStartTLSEnabled(starttls)
email.setStartTLSRequired(starttls)
}
smtp.fromAddress
.map(_ -> smtp.fromName.getOrElse(loginAccount.map(_.userName).getOrElse("GitBucket")))
.orElse(Some("[email protected]" -> loginAccount.map(_.userName).getOrElse("GitBucket")))
.foreach { case (address, name) =>
email.setFrom(address, name)
}
email.setCharset("UTF-8")
email.setSubject(subject)
email.setTextMsg(textMsg)
htmlMsg.foreach { msg =>
email.setHtmlMsg(msg)
}
email
}
} else None
}
}
//class MockMailer extends Notifier {
// def toNotify(subject: String, textMsg: String, htmlMsg: Option[String] = None)
// (recipients: Account => Session => Seq[String])(implicit context: Context): Unit = ()
//}