A. 怎樣用javaMail實現郵件的自動回復和定時發送
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.CronScheleBuilder;
2 import org.quartz.JobBuilder;
3 import org.quartz.JobDetail;
4 import org.quartz.Scheler;
5 import org.quartz.Trigger;
6 import org.quartz.TriggerBuilder;
7 import org.quartz.impl.StdSchelerFactory;
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("mmyJobName", "group1").build();
16 //為了立即測試,可以使用下面的代碼,每隔5秒鍾執行一次
17 //int secDelta = 5;
18 //Trigger trigger = TriggerBuilder
19 // .newTrigger()
20 // .withIdentity("mmyTriggerName", "group1")
21 // .withSchele(
22 // CronScheleBuilder.cronSchele("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("mmyTriggerName", "group1")
31 .withSchele(
32 CronScheleBuilder.cronSchele(secDelta + " 0 9 ? * SUN-SAT"))
33 .build();
34
35 Scheler scheler = new StdSchelerFactory().getScheler();
36 scheler.start();
37 //將觸發器與工作關聯起來
38 scheler.scheleJob(job, trigger);
39 }
40 }
發郵件依賴的包:activation.jar,mail.jar
將發郵件依賴的包和quartz下載得到的lib路徑下的jar包全部放在mylib路徑下,mylib路徑與java文件位於同一個目錄。編譯和運行時,可以使用命令:
set classpath=mylib/*;.;
javac CronTriggerExample.java
java CronTriggerExample