java实现qq邮箱每天定时发送邮件

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

我没有研究过quartz框架,这里主要是从实用的角度讲一下。在使用时,需要编写任务类和触发器类两部分的代码。任务类是你想实现的功能部分,需要实现Job接口。触发器类设置任务的定时执行时间。

在java实现email中,发件箱使用qq邮箱,可能每个人都一个qq邮箱。还有,在这里不得不感叹Java强大的类库,还有众多Java工作者的贡献。

任务类的代码:

 1 import org.quartz.Job;
 2 import org.quartz.JobExecutionContext;
 3 import org.quartz.JobExecutionException;
 4 import java.util.Calendar;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7 import java.lang.InterruptedException;
 8 import java.util.Random;
 9 import java.util.Properties;
10 import javax.mail.*;
11 import javax.mail.internet.*;
12 public class MailJob implements Job
13 {
14     public void execute(JobExecutionContext context)
15         throws JobExecutionException {
16         //收件人,标题和文本内容
17         String to = "#######@126.com";//填写你要发给谁
18         String title = createTitle();
19         String text = createText();
20         //设置属性
21         Properties props = new Properties();
22         //QQ邮箱发件的服务器和端口
23         props.put("mail.smtp.host", "smtp.qq.com");
24         props.put("mail.smtp.socketFactory.port", "465");
25         props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
26         props.put("mail.smtp.auth", "true");
27         props.put("mail.smtp.port", "25");
28         Session session = Session.getDefaultInstance(props,
29             new javax.mail.Authenticator() {
30                 protected PasswordAuthentication getPasswordAuthentication() {
31                     //填写你的qq邮箱用户名和密码
32                  return new PasswordAuthentication("*******@qq.com", "###***%%%");
33                 }
34             });
35         MimeMessage message = new MimeMessage(session);
36         //这里用flag来标记是否发件成功(有时候会连不上服务器),
37         //如果没有,继续发送,直到发送成功为止。
38         int flag = 0;
39         {
40         try {
41         //设置发件人,收件人,主题和文本内容,并发送
42             message.setFrom(new InternetAddress("*******@qq.com"));//填写你自己的qq邮箱,和上面相同
43             message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
44             message.setSubject(title);
45             message.setText(text);
46             System.out.println("Preparing sending mail...");
47             System.out.println(text);
48             Transport.send(message);
49             flag = 1;
50             System.out.println("message sent successfully");
51         } catch(Exception e) {
52             flag = 0;
53         }
54         } while(flag == 0);
55     }
56     //下面的两个方法,用来随机组合标题和文本内容。文本内容由四部分随机组合。
57     //产生标题
58     public String createTitle() {
59         String[] titles = {"love", "I love you", "Miss you", "My baby"};
60         Random randT = new Random(System.currentTimeMillis());
61         String title = titles[randT.nextInt(titles.length)];
62         return title;
63     }
64     //产生文本内容,文本内容由四部分随机组合得到。
65     public String createText() {
66         //名字纯属虚构,如有雷同(肯定会有),纯属巧合。
67         String[] parts1 = {"晓静,你好。", "晓静,你还好吗?", "晓静,你那边天气怎么样?"};
68         String[] parts2 = {
69             "距离上次见面,我感觉已经好长时间了。",
70             "流去的时间磨不去我对你的爱。",
71             "我仍然记得你在天安门前的那一抹笑容。"
72         };
73         String[] parts3 = {"今天,我大胆地追求你。",
74              "我不怕大胆地对你说,我爱你。",
75              "此刻,月亮代表我的心。"
76         };
77         String[] parts4 = {
78             "未来,我的心依旧属于你。",
79             "好想在未来陪你一起慢慢变老,当然在我心中你不会老。"
80         };
81         Random randT = new Random(System.currentTimeMillis());
82         String text = parts1[randT.nextInt(parts1.length)]
83             + parts2[randT.nextInt(parts2.length)]
84             + parts3[randT.nextInt(parts3.length)]
85             + parts4[randT.nextInt(parts4.length)];
86         return text;
87     }
88
89 }

触发器的代码:

 1 import org.quartz.CronScheduleBuilder;
 2 import org.quartz.JobBuilder;
 3 import org.quartz.JobDetail;
 4 import org.quartz.Scheduler;
 5 import org.quartz.Trigger;
 6 import org.quartz.TriggerBuilder;
 7 import org.quartz.impl.StdSchedulerFactory;
 8 import java.util.Random;
 9 public class CronTriggerExample
10 {
11     public static void main( String[] args ) throws Exception
12     {
13           //创建工作对象
14         JobDetail job = JobBuilder.newJob(MailJob.class)
15         .withIdentity("dummyJobName", "group1").build();
16         //为了立即测试,可以使用下面的代码,每隔5秒钟执行一次
17         //int secDelta = 5;
18          //Trigger trigger = TriggerBuilder
19         // .newTrigger()
20         // .withIdentity("dummyTriggerName", "group1")
21         // .withSchedule(
22         //     CronScheduleBuilder.cronSchedule("0/" + secDelta + " * * * * ?"))
23         // .build();
24         //在每天早上的9点多(不超过3分钟)执行
25         Random rand = new Random(System.currentTimeMillis());
26         int secDelta = rand.nextInt(60 * 3);
27         //创建触发器对象
28          Trigger trigger = TriggerBuilder
29         .newTrigger()
30         .withIdentity("dummyTriggerName", "group1")
31         .withSchedule(
32             CronScheduleBuilder.cronSchedule(secDelta + " 0 9 ? * SUN-SAT"))
33         .build();
34
35         Scheduler scheduler = new StdSchedulerFactory().getScheduler();
36         scheduler.start();
37         //将触发器与工作关联起来
38         scheduler.scheduleJob(job, trigger);
39     }
40 }

发邮件依赖的包: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

时间: 2024-10-13 05:13:03

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

JAVA 使用qq邮箱发送邮件

引入一个架包: 代码如下: private static final String QQ_EMAIL_HOST="smtp.qq.com";//qq SMTP服务器 地址 private static final String QQ_EMAIL_PORT="587";//qq SMTP服务器 端口(465这个端口有问题) private static final String QQ_EMAIL_FROM="[email protected]";/

java实现qq邮箱激活注册功能

1先去qq邮箱设置中开启 POP3和STMP 服务, 记住授权码 然后编写代码 package cn.yunhe.utils; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * 邮件发送工具类 * Created by Administrator on 2017/8/4

通过java给qq邮箱发送信息

通过java程序给qq邮箱发送信息. 1.第一步:下载mail的jar包:javax.mail.jar 下载地址:https://javaee.github.io/javamail/#Latest_News 2.直接使用下面的代码 public static void sendMessages() { try { //创建Properties 类用于记录邮箱的一些属性 final Properties props = new Properties(); //表示SMTP发送邮件,必须进行身份验证

java获取qq邮箱的网络爬虫

代码如下 package Game; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { p

qq邮箱发送

454 Authentication failed, please open smtp flag first!用QQ邮箱测试报错 我用QQ邮箱测试javamail发送邮件的功能,用户名密码设置正确,却总是发不出邮件. 开启下QQ邮箱的smtp服务器设置即可.

关于QQ邮箱“命令顺序不正确。 服务器响应为:Error: need EHLO and AUTH first !”问题

1.首先在QQ邮箱当中开启“POP3/SMTP服务” .2.获取“授权码 刚开始一直使用邮箱的密码.后面才发现,原来QQ邮箱通过第三方发送邮件应该使用授权码 o(≧口≦)o 附上腾讯的说明http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28 3.编码 使用SmtpClient来解决 EnableSsl设置为true UseDefaultCredentials设置为false Credenti

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

刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 完成验证 获取授权码(后面代码实现时使用) -----------------------------第二步 环境配置 即下载第三方库 https://github.com/javaee/javamail/releases -----------------------------第三步 代

java基于javaMail实现向QQ邮箱发送邮件

一.首先开启SMTP服务        在 QQ 邮箱里的      设置->账户->开启 SMTP 服务           注意:开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原始的邮箱密码,这样可以避免使用明文密码 二.设置spring配置文件 <?xml version="1.0" encoding="UTF-8"?>    <beans xmlns="http://www.springf

用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)

1.先启用QQ邮箱里POP3/STMP服务:生成授权码 2.导入mail.jar包(不要用太古董的技术,你懂得) 3.注意要在代码里加上开启SSL加密的代码 4.直接上代码 import java.util.Properties; import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import java