web-dev-qa-db-ja.com

Scala

ScalaとAkkaを使用してサービスを構築する予定です。これは電子メールに大きく依存します。実際、私のサービスとの通信のほとんどは、それに手紙を送ることによって行われますこれは、信頼できるメールサーバーと、Scalaからそれと通信する方法が必要であることを意味していると思います。

質問は、これを行うためのベストプラクティスは何ですか?どのメールサーバーを選択する必要がありますか。また、このタスクを実行するためのScalaソリューションは何ですか?

15
src091

通常 JavaMail API が使用されます。プロジェクトでは、独自のScalaライブラリにラップするか、既存のライブラリを使用できます。以下に、リフトフレームワークで既存のMailer AP​​Iを使用する を示します。 :

package code
package config

import javax.mail.{Authenticator, PasswordAuthentication}
import javax.mail.internet.MimeMessage

import net.liftweb._
import common._
import util._

/*
* A Mailer config object that uses Props and auto configures for gmail
* if detected.
*/
object SmtpMailer extends Loggable {
  def init(): Unit = {

    var isAuth = Props.get("mail.smtp.auth", "false").toBoolean

    Mailer.customProperties = Props.get("mail.smtp.Host", "localhost") match {
      case "smtp.gmail.com" => // auto configure for gmail
        isAuth = true
        Map(
          "mail.smtp.Host" -> "smtp.gmail.com",
          "mail.smtp.port" -> "587",
          "mail.smtp.auth" -> "true",
          "mail.smtp.starttls.enable" -> "true"
        )
      case h => Map(
        "mail.smtp.Host" -> h,
        "mail.smtp.port" -> Props.get("mail.smtp.port", "25"),
        "mail.smtp.auth" -> isAuth.toString
      )
    }

    //Mailer.devModeSend.default.set((m : MimeMessage) => logger.info("Sending Mime Message: "+m))

    if (isAuth) {
      (Props.get("mail.smtp.user"), Props.get("mail.smtp.pass")) match {
        case (Full(username), Full(password)) =>
          logger.info("Smtp user: %s".format(username))
          logger.info("Smtp password length: %s".format(password.length))
          Mailer.authenticator = Full(new Authenticator() {
            override def getPasswordAuthentication = new
              PasswordAuthentication(username, password)
          })
          logger.info("SmtpMailer inited")
        case _ => logger.error("Username/password not supplied for Mailer.")
      }
    }
  }
}

多くのWebフレームワークは、MIMEタイプ、添付ファイルなどを処理するための便利なメソッドを実装します。

言うまでもなく、電子メールの送信は100%信頼できるものではありません。火を忘れて操作を忘れるようなものです。デフォルトでは、メールプロトコルの確認やエラーの伝播はありませんが、通常は通常どおり受け入れられます。

SMTPメール送信者を使用している場合は、Gmailのような外部のものでも、ローカルにインストールされたpostfixでも、任意のメールサーバーに接続できます。

15
yǝsʞǝla

Scalaレイヤーの上にJavaより滑らかなAPIを提供するメール)である courier を試すことができます。残念ながら、現時点ではJVMでの電子メール送信用の非ブロッキングソリューションはありません(私が間違っている場合は修正してください)。

6
Tvaroh