java - 致命异常 MailerClient Play 2.5

标签 java email akka mailer playframework-2.5

我正在尝试从我的 Play 应用程序发送电子邮件。 Email 对象由另一个类准备并传递给将发送电子邮件的 Controller 。然而,当尝试发送电子邮件时,会引发致命异常。 我的 Controller 设置如下:

public class UserController extends BaseController<User> {

@Inject
MailerClient mailerClient;

@Inject
public UserController(MailerClient client) {
    super(new UserService());
    mailerClient = client;
}

public Result create(){
    resourceForm = formFactory.form(User.class);
    Form<User> filledForm = resourceForm.bindFromRequest();
    if(filledForm.hasErrors()){
        return badRequest(filledForm.errorsAsJson());
    }
    User user = filledForm.get();
    Map emailMap = new HashMap<>();
    emailMap.put("email" , user.email);
    List<User> existingUser = service.where(emailMap);
    if(existingUser.size() != 0){
        return JsonResponse.JsonMessage(BAD_REQUEST , "This Email is already registered");
    }else{
        user.status = getStatus(DORMANT);
        user.save();
        UserRegistration registration = new UserRegistration(user);
        registration.save();

        Email email = EmailDispatcher.buildEmail(ACTIVATION , user.email , registration.link);
        mailerClient.send(email);

    }
    return ok(Json.toJson(user));
}

我的电子邮件配置设置为:

play.mailer{
  host = "smtp.gmail.com"
  port = 465
  ssl = yes
  user = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4a1bca5a9b4a8a1eaa0a1b284a3a9a5ada8eaa7aba9" rel="noreferrer noopener nofollow">[email protected]</a>"
  password = password
}

在我的 Controller 中调用 mailerClient.send(email) 会导致引发以下异常:

[error] a.a.ActorSystemImpl - Uncaught fatal error from thread [application-akka.actor.default-dispatcher-2] shutting down ActorSystem [application]
java.lang.NoSuchMethodError: play.api.PlayConfig.getOptional(Ljava/lang/String;Lplay/api/ConfigLoader;)Lscala/Option;
        at play.api.libs.mailer.CommonsMailer.instance$lzycompute(MailerPlugin.scala:92)
        at play.api.libs.mailer.CommonsMailer.instance(MailerPlugin.scala:88)
        at play.api.libs.mailer.CommonsMailer.send(MailerPlugin.scala:109)
        at play.api.libs.mailer.MailerClient$class.send(MailerPlugin.scala:44)
        at play.api.libs.mailer.CommonsMailer.send(MailerPlugin.scala:83)
        at controllers.api.UserController.create(UserController.java:57)
        at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$6$$anonfun$apply$6.apply(Routes.scala:242)
        at router.Routes$$anonfun$routes$1$$anonfun$applyOrElse$6$$anonfun$apply$6.apply(Routes.scala:242)
        at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:157)
        at play.core.routing.HandlerInvokerFactory$$anon$4.resultCall(HandlerInvoker.scala:156)

我使用的是 Mailer 版本 3.0.1,我的 build.sbt 如下:

name := """API"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean)

scalaVersion := "2.11.7"

    libraryDependencies ++= Seq(
      javaJdbc,
      cache,
      javaWs,
      "mysql" % "mysql-connector-java" % "5.1.16",
      "de.svenkubiak" % "jBCrypt" % "0.4",
      "com.typesafe.play" %% "play-mailer" % "3.0.1"
    )

我在其他地方找不到类似的问题

最佳答案

将版本更改为 5.0.0-M1

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  "mysql" % "mysql-connector-java" % "5.1.38",
  "de.svenkubiak" % "jBCrypt" % "0.4",
  "com.typesafe.play" %% "play-mailer" % "5.0.0-M1"
)

我刚刚像这样解决了几分钟,你迟到了1个版本,有4.0.0-M1和4.0.0的新版本用于play 2.4,但5.0.0-M1用于play 2.5, play-mailer 从今天起大约 26 天前更新。

编辑: 5.0.0版本发布你可以使用它:

"com.typesafe.play" %% "play-mailer" % "5.0.0"

关于java - 致命异常 MailerClient Play 2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978910/

相关文章:

java - 使用 ByteBuddy 访问检测方法的参数字段

java - 使用 Excel 将多个参数添加到 Drools 规则决策表中的操作

java - @Autowired 或@Resource 字段是单例吗?

java - 使用java停止队列监听RabbitMQ

ios - 从 iOS 发送 C++ Protocol Buffer 消息

routes - Akka 消息传递机制示例

javascript - 当尝试发送给用户数组时,meteor.js email.send 不起作用

powershell - 比较两个不同的CSV文件并发送电子邮件

php - 使用 Javascript 和 PHP 将表单数据提交到两个位置?

scala - ActorSystem 单例注入(inject)