Session的活化与钝化钝化和通过代码(Java)发送邮件(QQ,新浪)

来源:互联网 发布:ant执行linux命令 编辑:程序博客网 时间:2024/04/29 14:27

监听器

其他两个监听器-1:

HttpSessionBindingListener
•实现此接口类的类,不必在web.xml中进行配置。
•实现此接口的类,通常是一个JavaBean,一个JavaBean通过实现此接口,可以感知自己是否添加到了Session中。或是感知自己是否从Session中移除。
示例:
public class Person implements HttpSessionBindingListener {public void valueBound(HttpSessionBindingEvent arg0) {System.err.println("我被添加到了Sesion中"+arg0.getName());}public void valueUnbound(HttpSessionBindingEvent arg0) {System.err.println("我从Session中被移除了....");}}

其他两个监听器-2-会话的持久化:
HttpSessionActivationListener
•实现此接口的JavaBean,可以感知自己被活化(从硬盘到内存)和钝化(从内存到硬盘)的过程。
•如果需要同时保存Session中的JavaBean则JavaBean也要实现Serializable序列化接口。
•实现此接口的JavaBean与HttpSessionBindingListener一样,不必配置到web.xml中。
•要实现此功能,必须要先配置以下信息:
 

第一步:书写一个JavaBean,并实现HttpSessionActivationListener接口如下:

第二步:JSP页面,判断是否存在Person,如果没有将Person放到Session中:

第三步:配置Tomcat的Server.xml文件或是将配置好的xml发布文件放到CATALIINA_HOME\conf\Catalina\localhost目录下(也就是小钢炮):

 

配置文件如下:
lirectory=“d:/a”是指Session文件保存的目录。

 

第四步:测试
1:多次开启新的浏览器窗口,并记录SESSIONID。
2:使用shutdown.bat关闭tomcat应用。
3:观察指定的目录下是否存在*.session文件。
4:再次重新启动tomcat,并使用http://localhost:8080/project;jsessionid=xxxxx指定sessionid的方式访问服务器。
5:观察是否为关闭tomcat之前的同一个Session。
6:一般情况下,PersistentManager持久化Session与Cookie共同使用。
7:HttpSessionActivationListener只做为监听类,监听自己是否钝化或是活化。

E-Mail协议简介:

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。
发送邮件的服务器使用发送协议,现在常用的是SMTP协议。所以,通常发邮件的服务器也称为SMTP服务器。
接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,所以通常也被称为POP3或IMAP服务器。
目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。默认发邮件服务器的端口为25,收邮件的端口为110.
 

邮件发送的工作图:

邮件收/发协议:

SMTP协议-发邮件协议
•全称为SimpleMail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间、以及两台SMTP服务器之间的通讯规则。端口一般为25.
POP3协议-收邮件协议
•全称为PostOffice Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则。端口一般为110.
IMAP协议-对POP3的扩展
•全称为InternetMessage Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,定义了邮件客户端软件与IMAP服务器的通讯规则。
 

通过命令行发送邮件的步骤如下:

第一步:与服务器建立连接。•telnet smtp.126.com 25第二步:先和服务器打个招乎。Ehlo someTxt第三步:请求登录:auth login.•输入用户名:经过base64编码以后的。•输入密码,也是经过base64编码以后的。第四步:输入发件人mail from:<wangjian_me@126.com>第五步:输入收件人rcpt to:<wangjianme@sohu.com> 第六步:输入data命令然后回车,开始输入数据。•可选的输入from:<…>•可选的输入to:<..>•subject:主题第七步:输入.(点)单行,表示数据结束。第八步:输入quit退出。

接收邮件:pop3:

telnet pop3.126.com 110user wj_leaf12345pass 1qaz2wsxlstat  - 显示总体信息。list - 列出所有信件。retr 1 - 显示第一封信件。quit  -退出

有在命令行窗口,使用telnet从bbb用户向aaa用户发邮件:

telnet 127.0.0.1 25ehlo bbbauth loginYmJiMTIzmail from:<bbb@wj.com>rcpt to:<aaa@wj.com>datafrom:<bbb@wj.com>to:<aaa@wj.com>subject:主题  [保留一个空行.]这是发出的数据.quit


 

 

通过命令行收取邮件:

telnet 127.0.0.1 110user aaapwd 123retr 10  --这是查看第10封信件。quit


发送邮件的一些细节:

1、邮件头和邮件体之间必须要使用空行分隔。
2、邮件头是指:
•From  示例:发送者是谁,from:<aaa@aa.com>
•To 示例:to:<bbb@aa.com>
•Subject :主题如:subject:XXXXX
•Cc  :抄送 cc:<abc@aa.com>
•Bcc : 暗送 bcc:<aaa@aa.com>
•[空行]
•数据部分

 

 

 

通过命令发送邮件太过繁琐,这里直接写了代码来发送邮件

canJavaMail

 

JavaMailDemo.java

package cn.hncu;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage.RecipientType;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;import org.junit.Test;public class JavaMailDemo {@Test//发送一封简单邮件public void test1() throws Exception{//1.创建一个进行邮件发送会话的session对象Properties p=new Properties();p.setProperty("mail.host", "smtp.sina.com");// qq: smtp.qq.comp.setProperty("mail.smtp.auth", "true");p.setProperty("mail.smtp.port", "25");//QQ: 官网上给出发送端口为587/465,但是我这里只有587成功了Session session=Session.getDefaultInstance(p,new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {PasswordAuthentication pa=new PasswordAuthentication("hncujava@sina.com", "hncu1234567");//QQ: 用户名为QQ邮箱,密码是QQ给的16位SMTP口令return pa;}});session.setDebug(true);//设置让程序和邮件服务器进行问答式交互//2.声明一封邮件-----MimeMessageMimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("hncujava@sina.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("544863212@qq.com"));//设置邮件发送的内容msg.setSubject("JAVA 发送邮件");msg.setContent("Hello  World <a href='http://www.hncu.net'>...............</a>2016.12.19", "text/html;charset=utf-8");//3.发送Transport.send(msg);}@Test//发送一封带附件的邮件public void test2() throws Exception{Properties p=new Properties();p.setProperty("mail.host", "smtp.qq.com");p.setProperty("mail.smtp.auth", "true");p.setProperty("mail.smtp.port", "587");Session session=Session.getDefaultInstance(p, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {PasswordAuthentication pwd=new PasswordAuthentication("862482770@qq.com", "ifhqsxukotsvbfje");return pwd;}});MimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("862482770@qq.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("544863212@qq.com"));msg.setSubject("带附件的邮件");/////////////////////以下部分和简单邮件不同之处///////////////////////////////body1-------邮件正文 MimeBodyPart body1=new MimeBodyPart();body1.setContent("Hello <a href='http://www.hncu.net'> Java Mail</a> 你好!","text/html;charset=utf-8");//body2-------附件(图片)MimeBodyPart body2=new MimeBodyPart();body2.setDataHandler(new DataHandler(new FileDataSource("./imgs/4.jpg")));body2.setFileName(MimeUtility.decodeText("良辰"));//body3-------附件(图片)MimeBodyPart body3=new MimeBodyPart();body3.setDataHandler(new DataHandler(new FileDataSource("./imgs/5.jpg")));//body3.setFileName("美景");这种方式会乱码body3.setFileName(MimeUtility.encodeText("美景"));//body4-------附件(图片)MimeBodyPart body4=new MimeBodyPart();body4.setDataHandler(new DataHandler(new FileDataSource("./imgs/1.txt")));//body3.setFileName("美景");这种方式会乱码body4.setFileName(MimeUtility.encodeText("文件.txt"));//把三个body封装成一个MimeMultipart对象,然后设进msg.setContent()中去MimeMultipart mm=new MimeMultipart();mm.addBodyPart(body1);mm.addBodyPart(body2);mm.addBodyPart(body3);mm.addBodyPart(body4);msg.setContent(mm);///////////////////////////////////////////////////////////////////////////Transport.send(msg);}}


 

简单邮件发送:

带有附件的邮件:附件可以下载

 

处理中文附件乱码:

MimeBodyPart mb = new MimeBodyPart();DataHandler dh = new DataHandler(new FileDataSource("./imgs/美女.jpg"));mb.setDataHandler(dh);mb.setFileName(MimeUtility.encodeText(dh.getName()));//设置文件名,同时处理中文名

 

 

 


邮件里面是可以内嵌图片来发送的,由于时间原因我没写,就不贴了。

 

 

0 0
原创粉丝点击