本周四的时候去学校的某机构值班,主要工作是帮老师送文件,干一些杂活。那天没有什么活儿,于是想起用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. java动态编程库,利用动态编程打印运行时调用全景(函数调用关系链)

    如果是一般java程序,不追求性能极致,想使用方便,推荐使用 Javassist 库. 如果是android程序,或者一般java程序欲追求性能极限,推荐使用 asm for java 及 asmde ...

  2. ffmpeg关于aac解码

    ffmpeg从0.11.3版本开始,默认解码aac为AV_SAMPLE_FMT_FLT (float) 0.11.2以前版本解码aac为AV_SAMPLE_FMT_S16 (16位short型)

  3. hdoj 2803 The MAX【简单规律题】

    The MAX Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. [Git]git常用命令总结

    git clone url 将远程库复制到本地 git status 查看本地库的状态 git add filename.filetype 将库中被修改的文件标记为添加状态 git diff 查看库中 ...

  5. (二)在.net中如何使用Memcached

    Step1:第一步当然是下载Memcached for c# API,

  6. iOS 开发中使用到的小技巧汇总

    国庆即将来到,一个小项目也即将完成,把自己在项目中用的一些小技巧写出来,方便查找. 1,去掉分割线--动画设置透明度alpha //去掉tableView的分隔线:     self.tableVie ...

  7. CAS分析——Core

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

  8. iOS开发中WebP格式的64位支持处理

    几个月前我们项目中添加了对webp格式的处理.期间遇到了一些问题,这是当中的一个小的记录. 官方下载地址:https://code.google.com/p/webp/downloads/list 对 ...

  9. android96 内存创建图片副本,画画板

    package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.grap ...

  10. java17 线程的方法

    线程的方法: .isAlive():判断线程是否还活着,即线程是否还未中止. .getPriority():获得线程的优先级数值. .setPriority():设置线程的优先级. .setName( ...