Java почта, как автоматически отправлять электронную почту при условии - PullRequest
4 голосов
/ 27 июня 2011

Никогда раньше не использовал почту Java.

В моем веб-приложении JSF у меня есть сущность (followUp) со свойством private Date checkDate;, которое соответствует сущности Animal. (У Зверя есть много последующих записей). В противном случае:

Пользователь должен каждые 3 месяца создавать новую запись в {followUp}, отмечать ее как отмеченную и указывать дату своего действия, которая называется «checkDate». Но так как пользователь настолько ленив, он делает это только для нескольких животных. Поэтому он действительно хочет получать оповещения по электронной почте о животных, которые не проверялись более 3 месяцев. Пример: я создаю запись followUp для животного 'A' 01.01.2011, затем приблизительно 01/04/2011 пользователь получает электронное письмо, предупреждающее его о необходимости проверить наблюдение за животным B.

Веб-приложение работает в локальной сети предприятия.

Все, что я знаю, это фрагмент:

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

import java.util.Properties;

class SimpleMail {
    public static void main(String[] args) throws Exception{
      Properties props = new Properties();
      props.setProperty("mail.transport.protocol", "smtp");
      props.setProperty("mail.host", "mymail.server.org");
      props.setProperty("mail.user", "emailuser");
      props.setProperty("mail.password", "");

      Session mailSession = Session.getDefaultInstance(props, null);
      Transport transport = mailSession.getTransport();

      MimeMessage message = new MimeMessage(mailSession);
      message.setSubject("Testing javamail plain");
      message.setContent("This is a test", "text/plain");
      message.addRecipient(Message.RecipientType.TO,
           new InternetAddress("elvis@presley.org"));

      transport.connect();
      transport.sendMessage(message,
          message.getRecipients(Message.RecipientType.TO));
      transport.close();
    }
}

Должен ли я создать для этой цели фильтр сервлетов, прослушиватель, компоненты поддержки приложения? Запрос, который зацикливается на followUp записи и возвращает checkDate последней записи и сравнивает его с сегодняшней датой?

Подойдет любая помощь. Привет.

1 Ответ

4 голосов
/ 27 июня 2011

Исходя из истории ваших вопросов, я знаю, что вы используете Glassfish 3 (Java EE 6 с EJB 3.1), поэтому я предлагаю создать @Singleton EJB с @Schedule метод, который выполняется в фоновом режиме с заданными интервалами, например ежедневно в полночь (00:00:00).

@Singleton
public class MailReminder {

    @Schedule(hour="0", minute="0", second="0", persistent=false)
    public void run() {
        // Do your check and mail job here.
    }

}

Вот и все. Никаких дополнительных настроек не требуется. Для тестирования вы можете использовать

    @Schedule(hour="*", minute="*/1", second="0", persistent=false)

чтобы он работал каждую минуту.

Смотри также:

...