Listener学习笔记-- day02 邮件系统

来源:互联网 发布:java求3个最小公倍数 编辑:程序博客网 时间:2024/05/21 10:14

一、电子邮件

1、邮件服务器:

          要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。

          这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

          邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。

2、电子邮箱:

          电子邮箱(E-mail地址)的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个帐号分配一定的空间,用户从而可以使用这个帐号以及空间,发送电子邮件和保存别人发送过来的电子邮件。

二、邮件协议

1、SMTP协议-发邮件协议 

         全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。
         端口号:25.

2、POP3协议-收邮件协议   pop  imap

         全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。
         端口号:110.

三、邮件发送流程


四、使用 JavaMail 发送邮件

1、创建工程,导入 jar 包


2、创建测试类

package cn.itcast.testemail;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class TestEmail {public static void main(String[] args) throws Exception {// 0.1 服务器的设置Properties props = new Properties();// props.setProperty("mail.host", "smtp.163.com");// props.setProperty("mail.smtp.auth", "true");// 0.2 账号和密码Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 126账号和密码(模拟账号,需要自己注册)// return new PasswordAuthentication("itcast", "123456");// 如果是张三给李四发送邮件,以下的参数代表的是张三的邮箱的账户和密码return new PasswordAuthentication("admin@wingzhe.com", "admin");}};// 1 与126服务器建立连接:SessionSession session = Session.getDefaultInstance(props, authenticator);// 2 编写邮件:MessageMessage message = new MimeMessage(session);// 2.1 发件人(模拟账号)// message.setFrom(new InternetAddress("itcast@126.com"));message.setFrom(new InternetAddress("admin@wingzhe.com"));// 2.2 收件人 , to:收件人 , cc :抄送,bcc:暗送(密送)。(模拟账号)message.setRecipient(RecipientType.TO, new InternetAddress("itcast@wingzhe.com"));// 2.3 主题message.setSubject("这是我们得第一份邮件");// 2.4 内容message.setContent("哈哈,您到我的商城注册了。", "text/html;charset=UTF-8");// 3 将消息进行发送:TransportTransport.send(message);System.out.println("OK");}}

五、定时任务

package cn.itcast.testTimer;import java.util.Timer;import java.util.TimerTask;public class TestTimter {public static void main(String[] args) {// 创建一个timer对象Timer timer = new Timer();// 创建MyTask对象MyTask mt = new MyTask();timer.schedule(mt, 3000);}}class MyTask extends TimerTask {@Overridepublic void run() {System.out.println("OKOKOK");}}


package cn.itcast.testTimer;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TestTimter02 {public static void main(String[] args) {// 创建一个timer对象Timer timer = new Timer();System.out.println(new Date().toLocaleString());// 3秒之后做一个任务timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("OKOKOK");System.out.println(new Date().toLocaleString());}}, 3000);}}

package cn.itcast.testTimer;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class TestTimter03 {public static void main(String[] args) {// 创建一个timer对象Timer timer = new Timer();System.out.println(new Date().toLocaleString());// 5秒之后每隔三秒做一次任务timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("timer:" + new Date().toLocaleString());}}, 5000, 3000);}}

六、定时发送生日祝福邮件的案例

1、案例分析

2、编写 Listener 代码

package cn.itcast.day37anli.listener;import java.util.List;import java.util.Timer;import java.util.TimerTask;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import cn.itcast.day37anli.domain.User;import cn.itcast.day37anli.service.UserService;import cn.itcast.day37anli.utils.EmailUtils;public class SendEmailListener implements ServletContextListener {public void contextInitialized(ServletContextEvent sce) {// 从明天早上7点开始,每隔24小时做一次任务,任务:将每天过生日的用户的邮箱账户从仓库中获取到,为这些账户依次发送生日祝福邮件// 创建工具类,定时任务Timer tm = new Timer();// 从5秒之后,每隔10秒执行一次任务tm.schedule(new TimerTask() {@Overridepublic void run() {// 调用业务层功能:将每天过生日的用户的邮箱账户从仓库中获取到UserService UserService = new UserService();try {List<User> list = UserService.findUsers();for (User user : list) {// 为每个用户发送邮件EmailUtils.sendEmail(user.getEmail());}System.out.println("OK");} catch (Exception e) {e.printStackTrace();}}}, 5000, 60 * 60 * 24 * 1000);}public void contextDestroyed(ServletContextEvent sce) {// TODO Auto-generated method stub}}

3、EamilUtil代码

package cn.itcast.day37anli.utils;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class EmailUtils {public static void sendEmail(String usermail) throws Exception {// 0.1 服务器的设置Properties props = new Properties();// props.setProperty("mail.host", "smtp.126.com");// props.setProperty("mail.smtp.auth", "true");// 0.2 账号和密码Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 126账号和密码(模拟账号,需要自己注册)// return new PasswordAuthentication("itcast", "123456");return new PasswordAuthentication("admin@store.com", "admin");}};// 1 与126服务器建立连接:SessionSession session = Session.getDefaultInstance(props, authenticator);// 2 编写邮件:MessageMessage message = new MimeMessage(session);// 2.1 发件人(模拟账号)// message.setFrom(new InternetAddress("itcast@126.com"));message.setFrom(new InternetAddress("admin@store.com"));// 2.2 收件人 , to:收件人 , cc :抄送,bcc:暗送(密送)。(模拟账号)message.setRecipient(RecipientType.TO, new InternetAddress(usermail));// 2.3 主题message.setSubject("生日快乐");// 2.4 内容message.setContent("哈哈,恭喜你,又老了一岁!", "text/html;charset=UTF-8");// 3 将消息进行发送:TransportTransport.send(message);}}



原创粉丝点击