① 怎样用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
② java中如何实现定时自动发送邮件
可以使用Quartz定时任务使用Cron表达式调用你发送邮件的方法
③ java定时自动发邮件,如何通过自己的PC每天给别人发邮件
做成系统的定时任务,在写个批处理,只要是开机就行了
④ 我们要用java语言做一个电子邮箱系统,里面的定时发送,自动回复都是什么原理
1、是在服务器上,你可以用java.util.Timer类定义一个定时发送邮件的方法
2、关于邮件发送,建议你到网上找java mail 相关资料,是开源免费的。
⑤ 如何用javamail定时发送邮件 详细03
Java 计时器框架的本身在这里不作过多的介绍,详细信息在IBM developerWorks 中国网站。 我们主要讨论如何利用Java 计时器框架在Solaris 平台来实现邮件的定时发送、JavaMail 发送邮件的实现以及在Solaris 平台上如何以后台方式运行整个邮件定时发送的应用。 下载本文的源代码,参考具体实现。 1.1 形成schele.jar 包 schele.jar 包中的目录结构如下: 我们将数据库的连接、日志、邮件和计划框架的通用类形成一个与具体应用要求无关的schele.jar 包。利用 javac 将编译生成的目标 class 文件存在当前目录的 classes 文件夹下,然后通过 jar -cvf schele.jar ./*命令生成schele.jar 包。 1.1.1 Oracle 数据库连接的建立 位于db 目录下,通过thin 方式建立与Oracle 的数据库连接,具体的实现参见《J2EE 应用中与Oracle 数据库的连接》一文。 1.1.2 日志 以后台方式定时运行的应用应特别注意日志的功能,因为只有通过分析详细的日志信息才能准确掌握应用的执行情况。在logs 目录下为Logs.java 文件,代码如下: package com.j2ee.logs; import java.io.*; import java.util.*; import java.text.SimpleDateFormat; public class Logs { private String logType=""; private String server="/schele/logs/server.log"; private String task="/schele/implements/nohup.out"; private SimpleDateFormat dateFormat = new SimpleDateFormat("【 yyyy 年MM月dd 日 E a HH:mm:ss 】"); /** * @param logType server task */ public Logs(String logType) { this.logType=logType; } public void print(String msg) { try { String path=""; if (logType.equals("server")) path=server; if (logType.equals("task")) path=task; // BufferedWriter out = new BufferedWriter(new FileWriter(path,true)); String str=dateFormat.format(new Date()); if (logType.equals("task")) out.newLine(); out.write(str,0,str.length()); out.write(msg,0,msg.length()); out.newLine(); out.close(); } catch(Exception e) { System.out.println("Logs.print:"+e.getMessage()); } } }; 通过类中的构造器,可以生成两个日志文件:server.log 和nohup.out。server.log 用来记录计时器框架本身定时调度的日志信息,通过它来判断定时调度服务每天是否正常运行;nohup.out 用来记录在具体应用中的调试信息,例如:在应用中通过System.out.println()输出的信息将记录在nohup.out 文件中。 1.1.3 邮件 位于mail 目录下,包括以下一些文件: 1)Debug.java 发送邮件时的调试信息 2)EMailContents.java 邮件的正文,为了使邮件接受者对收到的邮件有一个好的视觉效果,可以先写一个统一的HTML 邮件模板,在模板中填充相应的内容。EmailContents 类完成这一功能。效果如下: 3)Mailer.java 发送邮件的主方法。它调用MailThread 类中的方法创建一个发送邮件的线程。 4)MailThread.java 发送邮件线程类。它调用MailHelper 中的方法来完成发送邮件的工作。 5)MailHelper.java 发送邮件的实现类。在类的createAndSendMail 方法中包括了发送邮件一系列必须的过程,它可以完成一些邮件的正文、附件、抄送、回执等功能。在邮件的实现中用到了两个jar 包:mail.jar 和activation.jar。 1.1.4 计划框架 计划框架的详细内容可以通过本文前面提供的连接去详细了解,本文该部分的代码也出自IBM网站。 1.2 邮件定时发送的实现 这部分主要用到前面schele.jar 中的类来实现与具体应用要求相适应的应用。在implements 目录下有三个类: 1)ScheleTask.java 包含一个main 方法,在本例中"每天计划3 点开始执行计划好的任务"。 2)ScheleThread.java 线程类,在该类的 run 方法中,可以添加不同类型的计划定时执行的任务类来完成不同的定时执行的任务,在本例中调用了Mails 类中的sendMail 方法来定时发送邮件。 3)Mails.java 按照一定的业务逻辑规则实现邮件的发送。 1.3 邮件定时发送应用的运行 包括应用的启动和停止,在Solaris 上我们可以编写两个脚本:start 和stop 来完成该工作。 1.3.1 Start 脚本 Start 脚本内容如下: echo '************************************************************' CLASSPATH=.:/schele/implements/jar/schele.jar: /schele/implements/jar/classes12.zip: /schele/implements/jar/mail.jar:/schele/implements/jar/activation.jar export CLASSPATH echo 'set schele running environment success.' nohup java com.j2ee.implement.ScheleTask & echo 'start schele task success.' echo 'view logs:' echo ' /schele/implements/nohup.out' echo ' /schele/logs/server.log' date >> /schele/logs/server.log echo '计划框架成功启动' >> /schele/logs/server.log echo '************************************************************' 这里有两个关键点:CLASSPATH 的设置和 nohup 运行方式。在 CLASSPATH 中必须提供用到的所有 jar 包,多个jar 包用":"分隔;"&"表示以后台方式运行,"nohup"使应用的运行不依赖于当前的会话,如果不以"nohup"方式的话,即" java com.j2ee.implement.ScheleTask &",当你关闭你当前的会话时,应用将终止运行。可以使用"ps -ef | grep java"来查看应用运行的进程号。 当然也可以通过手工交互的方式完成上述步骤来运行应用。 1.3.2 Stop 脚本 Stop 脚本内容如下: echo '************************************************************' ps -e | grep java >> ps.out kill -9 `cut -c 2-6 ps.out` rm ps.out date >> /schele/logs/server.log echo '计划框架成功停止' >> /schele/logs/server.log echo 'stop schele task success.' echo '************************************************************' 该脚本中主要通过" ps -e | grep java"命令将输出信息重定向到"ps.out"文件中,在从文件中获得进程号,然后将它kill 掉。同样也可以通过手工的方式将它kill。 一般的问题在SUN 中国的技术社区都能找的到的 建议你去看看. 这篇是切过来的 你可以去SUN 中国技术社区下载具体实例 使用JSP开发WebMail 系统 电子邮件(E-mail)是Internet 上使用最广泛的服务之一,传统的Email 应用模式基于C/S 结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail 等)与提供邮件服务的服务器(如163.net、263.net、 371.net)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail 和Web 结合在一起,即通过Web 编程和适当的系统设置,使用户仅仅以访问Web 的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。WebMail 是目前Internet 上最受欢迎的服务之一,也是很多网站必备功能之一。另外WebMail 同样也适用于企业或校园网的应用。 通常在后台服务器的搭建和设置完成后实现WebMail 系统,而前台的开发工作主要是开发工具与后台数据库和邮件服务器的交互问题。在Linux 平台上运行的各种服务器软件稳定性和可靠性一直很好,而且选择跨平台的Java 开发工具使系统更稳定,具有更高的伸缩性。 JSP性能 尽管JSP 提供强大的功能是建立在Servlet 之上,但JSP 的性能和Servlet 相差无几。JSP 首先要编译成Servlet,这只会增加少量的代码,仅需编译一次且可以预编译,这就消除了运行时花费不必要的负担。JSP 与Servlet 性能上的差异仅仅表现在返回的数据是二进制的。这是因为JSP 返回时用的是 PrintWriter,而Servlet 可以应用于速度更快的OutputStream。 JSP 自定义的标签库可以封装大量的、复杂的Java 操作在一个Form里面,这些预先定义好的标签可以很容易的被那些没有Java 知识的人调用。因此,JSP 自定义的标签库可以有效地实现Java 程序员和 Web 设计人员工作的划分。然而,在页面上应用的每一个标签,Web 容器都必须创建一个新的标签句柄对象或从标签缓冲中提取它。因此,过多的应用自定义的标签将会带来不必要的资源浪费。 BodyTags 是一种特殊的定制标签,可以提取在它之间封装的内容或者替换那些内容。BodyTags 之间的内容一般会备份在内存中。由于BodyTags 之间能够嵌套和重复,因此,在程序中应用了多级的 BodyTags 会占用大量宝贵的内存和系统资源。 实现WebMail 的主要功能 该系统提供了获取、阅读、书写、转发、回复、打印、删除及用户管理的功能。考虑到系统的跨平台性,采用Java 及相关技术产品为开发工具,特别是采用JSP 作为服务程序,这样对客户端也没有其它要求,同时系统的性能在高负荷下得到进一步提高。整个WebMail 系统全部采用纯Java 代码,服务器端每响应一个服务请求启动一个线程,而不像CGI 那样启动一个进程。这样能够节省系统资源,提高系统性能。
⑥ 关于java定时任务,一次发了两封邮件
如果是同时发了2封邮件,自己敲个断点出来,看一下变量的赋值以及函数是不是调了2次
⑦ 关于java定时发送邮件,类似于QQ邮箱中的定时发送功能
建议方法:
如果你的java会死亡/失去控制, 请用系统的任务调度来发送邮件;
如果你的java由jboss等之类的托管, 用jboss内部的任务调度来发送邮件.
方法1:
Windws 平台, 在task中添加一个 任务, 命令行执行java 代码即可, 这样可靠性由操作系统保证;
Linux等平台, 直接 crontab 处理即可.
⑧ 用Java怎么做自动定时发送邮件系统出
兄弟,我想你要明白一个事情,java是运行在虚拟机上的,也就是说,java是一种“受限”的语言,运行在一个受限的环境中:第一,操作系统不允许jvm做的事情你是无法用java实现的,例如键盘记录需要的钩子,第二,jvm不支持的功能你也是无法使用java写出来的,例如开机启动。如果你用java强制修改系统注册表以达到开机启动目的,那么这将是一种jvm的越权操作行为,会被jvm禁止的。一个很明白的例子就是,1.5以前的版本不支持系统托盘,那么你是无法做一个系统托盘出来的。^_^