我想使用Java代码发送电子邮件。我使用smtp.gmail.com
发送邮件,它工作正常。现在我想在每月的特定日期发送电子邮件说每个月的第1天。我搜索了很多,但没有为我工作。
以下是我发送邮件的代码。
public class sendMailUsingTimeInterval{
public static void main(String[] args) throws IOException{
String[] to={"to@gmail.com"};
String[] cc={"cc@gmail.com"};
String subject = "hello";
String body = "Thanks , this is test.....!!";
//This is for google
sendMail("from@gmail.com","password","smtp.gmail.com","465","true",
"true",true,"javax.net.ssl.SSLSocketFactory","false",to,cc,
subject,body);
}
public synchronized static boolean sendMail(String userName,String passWord,String host,String port,String starttls,String auth,boolean debug,String socketFactoryClass,String fallback,String[] to,String[] cc,String subject,String text)
{
Properties props = new Properties();
//Properties props=System.getProperties();
props.put("mail.smtp.user", userName);
props.put("mail.smtp.host", host);
if(!"".equals(port))
props.put("mail.smtp.port", port);
if(!"".equals(starttls))
props.put("mail.smtp.starttls.enable",starttls);
props.put("mail.smtp.auth", auth);
if(debug){
props.put("mail.smtp.debug", "true");
}
else
{
props.put("mail.smtp.debug", "false");
}
if(!"".equals(port))
props.put("mail.smtp.socketFactory.port", port);
if(!"".equals(socketFactoryClass))
props.put("mail.smtp.socketFactory.class",socketFactoryClass);
if(!"".equals(fallback))
props.put("mail.smtp.socketFactory.fallback", fallback);
try
{
Session session = Session.getDefaultInstance(props, null);
session.setDebug(debug);
MimeMessage msg = new MimeMessage(session);
msg.setContent(text,"text/html");
msg.setSubject(subject);
msg.setFrom(new InternetAddress("from@gmail.com"));
for(int i=0;i<to.length;i++)
{
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to[i]));
}
for(int i=0;i<cc.length;i++)
{
msg.addRecipient(Message.RecipientType.CC, new InternetAddress(cc[i]));
}
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, userName, passWord);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
return true;
}
catch (Exception mex)
{
mex.printStackTrace();
return false;
}
}
调用此类时代码正常工作。如果有人能告诉我如何以每月1日自动发送消息的方式实现它,真的很感激。
答案 0 :(得分:1)
您可以使用Quartz计划程序执行此操作。
答案 1 :(得分:1)
您可以使用“注释类型计划”
@Target(值= METHOD) @Retention(值= RUNTIME) public @interface Schedule 使用基于类似cron的时间表达式的超时计划安排自动创建计时器。带注释的方法用作超时回调方法。
此注释的所有元素都是可选的。如果没有指定,则会创建持久计时器,并且在与执行应用程序的容器关联的默认时区中每天午夜发生回调...
文档 - http://docs.oracle.com/javaee/6/api/javax/ejb/Schedule.html
示例 - https://stackoverflow.com/a/7499769/1490962
https://stackoverflow.com/a/5357856/1490962
http://ci.apache.org/projects/openejb/examples-generated/schedule-methods/
答案 2 :(得分:0)
这不是你可以通过邮件API直接做的事情,你必须使用某种调度工具(Quartz,Spring @Scheduled
或类似的)来调用sendMail
at适当的时间和适当的参数。