本周四的时候去学校的某机构值班,主要工作是帮老师送文件,干一些杂活。那天没有什么活儿,于是想起用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. 普通邮箱设置客户端授权码并开启stmp服务以及关于QQ邮箱“命令顺序不正确。 服务器响应为:Error: need EHLO and AUTH first !”问题全指导

    Zoomla!逐浪CMS带有强大的邮局功能,可以用于发送邮件与进行事务管理. 其中邮局配置大家不太熟悉这里提供一系列教程. 1.首先在QQ邮箱当中开启"POP3/SMTP服务" 2 ...

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

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

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

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

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

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

随机推荐

  1. strip, 关于去除目标文件种的不必要信息

    对于so动态库及可执行文件,可以直接调用不带参数的strip (-s, 即--strip-all)去除大多数不必要的信息.因为so库非常标准,所以strip之后仍然可以进行完美的动态连接:而可执行文件 ...

  2. ssh-copy-id password

  3. 问题-[Delphi]无法设置断点

    问题现象: 今天突然发现不知何时起DELPHI7除了.dpr文件外,其余各Unit都无法设置断点.即在设计状态下设置了断点,在运行后出现的无效断点!百思不得其解...后查了许多资料,花了两个小时才搞好 ...

  4. windows 文件名太长无法删除的解决方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. Android官方技术文档翻译——ApplicationId 与 PackageName

    本文译自androd官方技术文档<ApplicationId versus PackageName>,原文地址:http://tools.android.com/tech-docs/new ...

  6. dmesg 程序崩溃调试

    [root@localhost log]# cat -n /root/xx.c #include <stdio.h> void func(char *p) { *p = 'p'; } in ...

  7. 【转】Mac和iOS开发资源汇总—更新于2013-07-19

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...

  8. beaglebone-black 在Angstrom系统中的网络配置方法

    Beaglebone Linux 101: Assigning a Static IP Address with Connman Posted on February 6, 2012 by dwatt ...

  9. AFNetworking源码分析

    来源:zongmumask 链接:http://www.jianshu.com/p/8eac5b1975de 简述 在iOS开发中,与直接使用苹果框架中提供的NSURLConnection或NSURL ...

  10. Android开发之从网络URL上下载JSON数据

    网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...