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

一、电子邮件

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() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// 126账号和密码(模拟账号,需要自己注册)
				// return new PasswordAuthentication("itcast", "123456");
				// 如果是张三给李四发送邮件,以下的参数代表的是张三的邮箱的账户和密码
				return new PasswordAuthentication("admin@wingzhe.com", "admin");
			}
		};

		// 1 与126服务器建立连接:Session
		Session session = Session.getDefaultInstance(props, authenticator);

		// 2 编写邮件:Message
		Message 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 将消息进行发送:Transport
		Transport.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 {

	@Override
	public 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() {

			@Override
			public 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() {

			@Override
			public 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() {

			@Override
			public 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() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// 126账号和密码(模拟账号,需要自己注册)
				// return new PasswordAuthentication("itcast", "123456");
				return new PasswordAuthentication("admin@store.com", "admin");
			}
		};

		// 1 与126服务器建立连接:Session
		Session session = Session.getDefaultInstance(props, authenticator);

		// 2 编写邮件:Message
		Message 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 将消息进行发送:Transport
		Transport.send(message);

	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值