通过java在特定日期发送自动邮件

时间:2011-04-28 06:35:46

标签: java email smtp scheduled-tasks

我正在使用Java mail API通过我的java应用程序发送电子邮件。但我想在未来的日期自动发送,即每个月/每年的任何具体日期。我已经使用我的ISP的SMTP服务器发送上述id的电子邮件。我在网上引用了以下可用示例。如何在这里设置任何具体的日期。我已经尝试过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

2 个答案:

答案 0 :(得分:2)

为其配置Quartz作业。使用cron trigger指定执行事件

答案 1 :(得分:1)

如果您使用的是EJB 3.0+容器,则可以轻松使用计时器服务。

您需要创建会话bean,并实现TimedObject接口或使用@Timeout注释方法。您可以通过TimerServiceInitialContext获取getTimerService()的实例,然后使用其中一个createTimer()变体创建一个计时器。它可能需要一个间隔,或一个Date对象指定何时到期......