Электронная почта Java для Play Framework 2.2.0

Я использую Play Framework 2.2.0 с java 7.4.

Всю неделю я пытался найти модуль или пакет электронной почты, который я мог бы использовать для отправки электронной почты из моего игрового приложения. Я пробовал много разных пакетов и каждый раз получаю либо исключение package not found, либо ошибку компиляции, либо исключение package not found.

У меня было много вариантов Build.scala и Build.sbt. Я также пробовал неуправляемые зависимости и управляемые зависимости, извлекаемые из «maven», я полагаю, что он вызывается и извлекается из моего каталога / lib соответственно. Пакеты, которые я загрузил в свой каталог /lib:

commons-io-2.3

javax.mail

play-plugins-mailer_2.2.0

Мои версии моего Build.scala были:

Build.scala

1-я попытка:

import sbt._
import Keys._

object ApplicationBuild extends Build {

    val appName         = "Asset Manager"
    val appVersion      = "1.0"

    val appDependencies = Seq(
        "mysql" % "mysql-connector-java" % "5.1.27",
        "org.scala-tools" %% "scala-stm" % "0.3",
        "org.apache.derby" % "derby" % "10.4.1.3" % "test",
        "org.apache.commons" % "commons-email" % "1.3.1",
        "commons-io" % "commons-io" % "2.3"
    )
}

2-я попытка:

import sbt._
import Keys._

object ApplicationBuild extends Build {

    lazy val buildVersion = "2.2.0"
    lazy val playVersion = "2.2.0"

    val appName         = "Asset Manager"
    val appVersion      = "1.0"

    val appDependencies = Seq(
        "mysql" % "mysql-connector-java" % "5.1.27",
        "org.scala-tools" %% "scala-stm" % "0.3",
        "org.apache.derby" % "derby" % "10.4.1.3" % "test",
        "commons-io" % "commons-io" % "2.3"
    )

    libraryDependencies += "org.apache.commons" % "commons-email" % "1.3.1";
    libraryDependencies += "com.typesafe" %% "play-plugins-util" % buildVersion;

}

Мой файл Java для отправки по электронной почте Parts.java:

Попытка 1

package controllers;

import play.libs.*;

import java.io.*;
import java.util.*;

import org.apache.commons.mail.*;

...

        SimpleEmail email = new SimpleEmail();
        email.setFrom(User.getByUsername(Session.get("username")).email);
        email.addTo(app.configuration().getString("ownerEmail"));
        email.addTo(part.email);
        email.setSubject("Part Added: " + part.vendor + " - " + part.label);
        email.setMsg("A Part has been added to the Asset Manager:\n\n"
            + part.toString());
        Mail.send(email);

...

2-я попытка:

package controllers;

import play.libs.*;

import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

import com.typesafe.plugin._;

...

            MailerAPI mail = play.Play.application().plugin(MailerPlugin.class).email();
            mail.setSubject("test");
            mail.addRecipient("");
            mail.addFrom("");
            mail.sendHtml("A Part has been added to the Asset Manager:\n\n" + part.toString());

...

3-я попытка:

import java.io.*;
import java.util.*;
import java.util.*;
import javax.mail.internet.*;
import javax.activation.*;

...

            String to = "...";
            String from = "...";
            String host = "localhost";
            Properties properties = System.getProperties();
            properties.setProperty("mail.smtp.host", host);

            // Get the default Session object.
            Session session = Session.getDefaultInstance(properties);

            try{
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
                message.setSubject("This is the Subject Line!");
                message.setText("This is actual message");

                // Send message
                Transport.send(message);
                System.out.println("Sent message successfully....");
            }catch (MessagingException me) {
                me.printStackTrace();
            }
...

Мой вопрос в том, как настроить Play Framework, чтобы он не говорил мне об этом:

**Compilation error**

error: cannot find symbol
In ..\app\controllers\Parts.java at line 116.

113            // mail.addFrom("");
114            // mail.sendHtml("A Part has been added to the Asset Manager:\n\n" + part.toString());
115
116            SimpleEmail email = new SimpleEmail();
117            email.setHostName("smtp.googlemail.com");
118            email.setSmtpPort(465);
119            email.setFrom("","");
120            // email.setFrom(User.getByUsername(Session.get("username")).email);
121            email.addTo("");

** примечание: я очистил некоторые строки, содержащие личную информацию.

Всякий раз, когда я пытаюсь обновить свою страницу. Мне нужно знать, куда я поместил информацию о своем пакете, как должен выглядеть build.scala, правильный ли порядок команд (../play clean; ../play dependencies; ../play run), должен ли я используя управляемый или неуправляемый и, в конечном счете, возможно ли это вообще!?!?

Спасибо всем.


person mk7upurz87    schedule 07.12.2013    source источник
comment
Раньше я использовал редактор Sublime Text 2. Итак, я решил эту проблему, установив новейшую версию eclipse. Я запустил команду eclipse для игры и импортировал ее с помощью задокументированных шагов Play. Это была проблема пути к классам. Однако теперь электронные письма по-прежнему не отправляются, и ошибок не возникает... Используя объект SimpleEmail, я должен иметь возможность отправлять электронные письма с помощью localhost?   -  person mk7upurz87    schedule 08.12.2013


Ответы (3)


Похоже, у вас есть несколько вопросов:

  1. How to get play to work with email.
    • For this I suggest look at the play authenticate code and see how they make it work. I'm currently using the module to send email. play-authenticate
  2. У вас могут возникнуть проблемы с получением журналов электронной почты. Журналы системы смотреть не пробовали? /var/log/syslog (например, в Ubuntu/Debian). Также есть параметры конфигурации журнала для игры здесь

  3. (Похоже, вы решили это?) У вас есть:

    Ошибка компиляции

    ошибка: не удается найти символ в ..\app\controllers\Parts.java в строке 116.

    • There's nothing really special about setting up paths for play as long as you have the play executable in the path.
person Rico    schedule 09.12.2013
comment
Код, который я предоставил, не был полным, поэтому ошибка не была бы точной из того, что я предоставил здесь. - person mk7upurz87; 10.12.2013

Спасибо за ответ. Я только что решил это сегодня утром! Ошибка была вызвана тем, что мои пакеты не были добавлены в мой путь. Я настоятельно рекомендую использовать мощную IDE для модификации пути к классам. Я ввел его в Eclipse и сразу же исправил ссылку на объект. Для самого почтовика вот мои результаты:

...

import javax.mail.*;
import javax.mail.internet.*;

...

    try {
        String host = "smtp.gmail.com";
        String username = "[email protected]";
        String password = "password";
        InternetAddress[] addresses = {new InternetAddress("[email protected]"),
            new InternetAddress(bid.email),
            new InternetAddress("[email protected]")};
        Properties props = new Properties();

        // set any needed mail.smtps.* properties here
        Session session = Session.getInstance(props);
        MimeMessage message = new MimeMessage(session);
        message.setSubject("my subject placed here");
        message.setContent("my message placed here:\n\n"
                + part.toString(), "text/plain");
        message.setRecipients(Message.RecipientType.TO, addresses);

        // set the message content here
        Transport t = session.getTransport("smtps");
        try {
            t.connect(host, username, password);
            t.sendMessage(message, message.getAllRecipients());
        } finally {
            t.close();
        }          
    } catch (MessagingException me) {
        me.printStackTrace();
    }
person mk7upurz87    schedule 09.12.2013

Попробуй это :

https://github.com/typesafehub/play-plugins/tree/master/mailer

Это сработало как шарм для меня

Дайте знать, если у вас появятся вопросы

person abhig    schedule 19.12.2013