Play Framework 2.2.0 Java Email
Я использую Play Framework 2.2.0 с Java 7.4.
Всю неделю я пытался найти модуль электронной почты или пакет, который я мог бы использовать для отправки электронного письма из моего игрового приложения. Я перепробовал много разных пакетов, и каждый раз, когда я получаю либо исключение пакета не найден, либо ошибка компиляции, либо исключение пакета не найден.
У меня было много вариантов Build.scala и Build.sbt. Я также попробовал неуправляемые зависимости и управляемые зависимости, извлекаемые из 'maven'. Я считаю, что они вызывались и извлекались из моего каталога /lib соответственно. Пакеты, которые я скачал в каталог /lib:
Обще-IO-2,3
javax.mail
плей-плагины-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 зависимости;../play run), должен ли я быть использование управляемого или неуправляемого и, в конечном счете, возможно ли это вообще!?!?
Спасибо всем.
3 ответа
Спасибо за ответ. Я только что решил это сегодня утром! Ошибка была вызвана тем, что мои пакеты не были добавлены в мой путь. Я настоятельно рекомендую использовать Power IDE для модификации classpath. Я ввел его в Eclipse и сразу же исправил ссылку на мой объект. Для самого почтовика вот мои результаты:
...
import javax.mail.*;
import javax.mail.internet.*;
...
try {
String host = "smtp.gmail.com";
String username = "program-email@gmail.com";
String password = "password";
InternetAddress[] addresses = {new InternetAddress("user@anymail.com"),
new InternetAddress(bid.email),
new InternetAddress("another-user@anymail.com")};
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();
}
Попробуй это:
https://github.com/typesafehub/play-plugins/tree/master/mailer
Это сработало как шарм для меня
Дайте знать, если у вас появятся вопросы
Похоже, у вас есть несколько вопросов:
- Как заставить игру работать с электронной почтой.
- Для этого я предлагаю взглянуть на код play authenticate и посмотреть, как они заставляют его работать. В настоящее время я использую модуль для отправки электронной почты. играть аутентификацию
У вас могут быть проблемы с получением журналов электронной почты. Вы пробовали просматривать системные журналы? /var/log/syslog (например, в Ubuntu/Debian). Здесь также есть параметры конфигурации журнала для игры.
(Похоже, вы решили это?) У вас есть:
Ошибка компиляции
ошибка: не удается найти символ в..\app\controllers\Parts.java в строке 116.
- Нет ничего особенного в настройке путей для воспроизведения, если в пути есть исполняемый файл play.