All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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 = ()
//}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy