#java #email #smtp #scheduled-tasks
#java #Адрес электронной почты #smtp #запланированные задачи
Вопрос:
Я использую Java mail API для отправки электронной почты через мое Java-приложение. Но я хочу автоматически отправлять ее на будущую дату, то есть на любую конкретную дату каждого месяца / года. Я использовал SMTP-сервер моего интернет-провайдера для отправки электронной почты по указанному идентификатору.Я сослался на приведенный ниже доступный пример в сети. Как установить любую конкретную дату здесь.Я попробовал SimpleDateFormat и установил его здесь, но он по-прежнему отправляет почту немедленно, но устанавливает дату отправки в качестве указанной конкретной даты. Есть ли какой-либо другой способ автоматической отправки электронной почты в указанную дату и время?
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
// Send a simple, single part, text/plain e-mail
public class TestEmail {
public static void main(String[] args) {
// SUBSTITUTE YOUR EMAIL ADDRESSES HERE!!!
String to = "abc@abc.com";
String from = "abc@abc.com";
// SUBSTITUTE YOUR ISP'S MAIL SERVER HERE!!!
String host = "smtp.yourisp.net";
// Create properties, get Session
Properties props = new Properties();
// If using static Transport.send(),
// need to specify which host to send it to
props.put("mail.smtp.host", host);
// To see what is going on behind the scene
props.put("mail.debug", "true");
Session session = Session.getInstance(props);
try {
// Instantiatee a message
Message msg = new MimeMessage(session);
//Set message attributes
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("Test E-Mail through Java");
msg.setSentDate(new Date());
// Set message content
msg.setText("This is a test of sending a "
"plain text e-mail through Java.n"
"Here is line 2.");
//Send the message
Transport.send(msg);
}
catch (MessagingException mex) {
// Prints all nested (chained) exceptions as well
mex.printStackTrace();
}
}
}//End of class
Ответ №1:
Настройте Quartz
задание для этого. Используйте триггер cron для указания события выполнения
Ответ №2:
Если вы используете контейнер EJB 3.0 , вы могли бы легко использовать службу таймера.
Вам нужно создать сеансовый компонент и либо реализовать TimedObject
интерфейс, либо прокомментировать метод с помощью @Timeout
. Вы можете получить экземпляр TimerService
из InitialContext
через getTimerService()
, затем создать таймер с одним из createTimer()
вариантов. Для этого может потребоваться интервал или Date
объект, указывающий, когда он истекает…