本周四的时候去学校的某机构值班,主要工作是帮老师送文件,干一些杂活。那天没有什么活儿,于是想起用Java实现发送邮件和接收邮件的功能。前几天接触过一点quartz框架,用来实现定时开始任务的功能。于是,这里把他们结合起来了,实现定时发送邮件,向暗恋的女神表白的用处(yiyin)。

我没有研究过quartz框架,这里主要是从实用的角度讲一下。在使用时,需要编写任务类和触发器类两部分的代码。任务类是你想实现的功能部分,需要实现Job接口。触发器类设置任务的定时执行时间。
在java实现email中,发件箱使用qq邮箱,可能每个人都一个qq邮箱。还有,在这里不得不感叹Java强大的类库,还有众多Java工作者的贡献。
 
 
任务类的代码:
 import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.lang.InterruptedException;
import java.util.Random;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class MailJob implements Job
{
public void execute(JobExecutionContext context)
throws JobExecutionException {
//收件人,标题和文本内容
String to = "#######@126.com";//填写你要发给谁
String title = createTitle();
String text = createText();
//设置属性
Properties props = new Properties();
//QQ邮箱发件的服务器和端口
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
//填写你的qq邮箱用户名和密码
return new PasswordAuthentication("*******@qq.com", "###***%%%");
}
});
MimeMessage message = new MimeMessage(session);
//这里用flag来标记是否发件成功(有时候会连不上服务器),
//如果没有,继续发送,直到发送成功为止。
int flag = 0;
{
try {
      //设置发件人,收件人,主题和文本内容,并发送
message.setFrom(new InternetAddress("*******@qq.com"));//填写你自己的qq邮箱,和上面相同
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(title);
message.setText(text);
System.out.println("Preparing sending mail...");
System.out.println(text);
Transport.send(message);
flag = 1;
System.out.println("message sent successfully");
} catch(Exception e) {
flag = 0;
}
} while(flag == 0);
}
//下面的两个方法,用来随机组合标题和文本内容。文本内容由四部分随机组合。
//产生标题
public String createTitle() {
String[] titles = {"love", "I love you", "Miss you", "My baby"};
Random randT = new Random(System.currentTimeMillis());
String title = titles[randT.nextInt(titles.length)];
return title;
}
//产生文本内容,文本内容由四部分随机组合得到。
public String createText() {
//名字纯属虚构,如有雷同(肯定会有),纯属巧合。
String[] parts1 = {"晓静,你好。", "晓静,你还好吗?", "晓静,你那边天气怎么样?"};
String[] parts2 = {
"距离上次见面,我感觉已经好长时间了。",
"流去的时间磨不去我对你的爱。",
"我仍然记得你在天安门前的那一抹笑容。"
};
String[] parts3 = {"今天,我大胆地追求你。",
"我不怕大胆地对你说,我爱你。",
"此刻,月亮代表我的心。"
};
String[] parts4 = {
"未来,我的心依旧属于你。",
"好想在未来陪你一起慢慢变老,当然在我心中你不会老。"
};
Random randT = new Random(System.currentTimeMillis());
String text = parts1[randT.nextInt(parts1.length)]
+ parts2[randT.nextInt(parts2.length)]
+ parts3[randT.nextInt(parts3.length)]
+ parts4[randT.nextInt(parts4.length)];
return text;
} }

触发器的代码:

 import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Random;
public class CronTriggerExample
{
public static void main( String[] args ) throws Exception
{
//创建工作对象
JobDetail job = JobBuilder.newJob(MailJob.class)
.withIdentity("dummyJobName", "group1").build();
//为了立即测试,可以使用下面的代码,每隔5秒钟执行一次
//int secDelta = 5;
//Trigger trigger = TriggerBuilder
// .newTrigger()
// .withIdentity("dummyTriggerName", "group1")
// .withSchedule(
// CronScheduleBuilder.cronSchedule("0/" + secDelta + " * * * * ?"))
// .build();
//在每天早上的9点多(不超过3分钟)执行
Random rand = new Random(System.currentTimeMillis());
int secDelta = rand.nextInt(60 * 3);
//创建触发器对象
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule(secDelta + " 0 9 ? * SUN-SAT"))
.build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
//将触发器与工作关联起来
scheduler.scheduleJob(job, trigger);
}
}
发邮件依赖的包:activation.jar,mail.jar
quartz下载地址:http://www.quartz-scheduler.org/downloads/
 

将发邮件依赖的包和quartz下载得到的lib路径下的jar包全部放在mylib路径下,mylib路径与java文件位于同一个目录。编译和运行时,可以使用命令:

set classpath=mylib/*;.;
javac CronTriggerExample.java
java CronTriggerExample

java实现qq邮箱每天定时发送邮件的更多相关文章

  1. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  2. JAVA 使用qq邮箱发送邮件

    引入一个架包: gradle( "com.sun.mail:javax.mail:1.5.6", ) 代码如下: private static final String QQ_EM ...

  3. java mail qq邮箱配置 实例

    程序入口:Test_Email_N.java import java.io.IOException; import java.util.Date; import java.util.Propertie ...

  4. C# QQ邮箱授权码发送邮件

    using System.Net;using System.Web.Mail; public class SendMail { /// <summary> /// 发送Email /// ...

  5. qq邮箱发送

    454 Authentication failed, please open smtp flag first!用QQ邮箱测试报错 我用QQ邮箱测试javamail发送邮件的功能,用户名密码设置正确,却 ...

  6. Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)

    加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...

  7. python3 通过qq邮箱定时发送邮件

    下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...

  8. 基于java mail实现简单的QQ邮箱发送邮件

    刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...

  9. 使用 QQ 邮箱发送邮件报错:java.net.SocketTimeoutException: Read timed out. Failed messages: javax.mail.MessagingException: Exception reading response

    使用 QQ 邮箱发送邮件报错:java.net.SocketTimeoutException: Read timed out. Failed messages: javax.mail.Messagin ...

随机推荐

  1. 超小Web手势库AlloyFinger原理

    目前AlloyFinger作为腾讯手机QQ web手势解决方案,在各大项目中都发挥着作用. 感兴趣的同学可以去Github看看:https://github.com/AlloyTeam/AlloyFi ...

  2. 【Java基础】并发

    Num1:同步访问共享的可变数据 关键字Synchronized可以保证在同一时刻,只有一个线程可以执行某一个方法,或者某一个代码块.. 同步不仅仅理解为互斥的方式,如果没有同步,一个线程的变化就不能 ...

  3. day 2 常用快捷键

    tab命令或路径补全**,linux里最有用的快捷键,如果tab不到路径或命令,就代表没有这个路径或者命令,还有可能是权限不对. ctrl+c :终止当前任务命令或程序. ctrl+d 退出当前用户环 ...

  4. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

  5. jdk源码调试功能

    JDK源码重新编译——支持eclipse调试JDK源码--转载 最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt. ...

  6. gridview回顾

    第一看asp.net是在做项目之前,感觉收获也很大,第二次看gridview是在做完项目之后对GridView的回顾,这次的感觉是:我需要多想点,知识直到用时方觉少.直入正题吧,看gridview. ...

  7. 一起来学Go --- (go的简介以及环境的安装)

    Go 相信大家,看到这篇文章的时候,已经自己在百度百科了解了go的发展史已经特性,再次我依然....得哔哔叨一会.   ^.^ go语言的特性 go语言作为一门静态类型开发语言,与当前的开发语言想必具 ...

  8. 转-WebService到底是什么?

    原文链接:WebService到底是什么? 一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多 ...

  9. Scrapy at a glance预览

    1.安装scrapy 2.创建爬虫项目 scrapy startproject test_scrapy 3.创建quotes_spider.py文件4.复制下面代码到quotes_spider.py文 ...

  10. Swift Defer 延迟调用

    1.Defer 在一些语言中,有 try/finally 这样的控制语句,比如 Java.这种语句可以让我们在 finally 代码块中执行必须要执行的代码,不管之前怎样的兴风作浪.在 Swift 2 ...