JSP参考教材PPT第四章会话跟踪简介JavaMail和Servl.ppt
第四章,JavaMail 和 Servlet,回顾,会话跟踪允许服务器跟踪同一客户端作出的连续请求HttpServletRequest 接口的 getSession()方法用于创建会话不同的会话跟踪技术包括URL 重写、Cookie 和隐藏表单域运行于同一服务器上的 Servlet 可以使用 Servlet 间通信方法进行通信Servlet 上下文中可以存储共享对象,目标,使用 JavaMail API描述 JavaMail 会话和消息使用 Transport 对象创建 Send Mail Servlet描述 Web Mail Servlet,Java Mail web,通过一个Java Mail Web应用程序,客户可以访问Mail服务器上的邮件帐号,收发邮件和管理邮件夹Email邮件服务器可以分为发送邮件的服务器和接收邮件的服务器发送邮件服务器使用邮件发送协议,常用的是SMTP协议,所以通常也把发送邮件的服务器称为SMTP协议接收邮件的服务器使用接收邮件协议,通常有POP3协议和IMAP协议,所以也叫做POP3服务器或IMAP服务器,E-mail系统,客户机A,E-Mail服务器A,E-Mail服务器B,客户机B,Internet,1,3,2 SMTP协议,pop3协议,客户机A向客户机B发送邮件的过程,收发邮件的过程,SMTP发送一封邮件的过程客户端邮件首先到达邮件服务器,再由SMTP服务器负责传送到接收方的服务器。发送前发送服务器会与接收服务器联系,以确认接收方服务器是否已经准备好。如果已经准备好,则传送邮件;如果没有准备好,发送服务器会等待,并再一段时间后继续与接收方服务器进行联系,如果在规定的时间内联系不上,则发送消息到客户端说明情况POP3收信的过程用户通过自己熟悉的Email客户端软件,如foxmail,outlook等设置相应的参数后,就能够将所有的邮件从远程邮件服务器上下载到本地机上,演示:架设james服务器,JavaMail API,JavaMail API,抽象类的 集合,跨平台和跨协议,提供发送和接收 JavaMail 的功能,SMTP 服务器用于发送邮件,POP3 和 IMAP 服务器用于接收邮件,JavaMail 用于通过网络或 Internet 发送和接收邮件。JavaMail API是SUN为java开发者提供的公用Mail API框架,它支持各种电子邮件通信协议,如IMAP,POP3,SMTP,为java应用程序提供email处理的接口,JavaMail 组件,JavaMail API,抽象类层,Internet 实现层,中间层,类结构,Message,Store,Session,Folder,JavaMail 类,开发javamail应用需要两个jar文件:mail.jar 和 activation.jar,jbuilder2006自带这两个文件,6种主要类,定义了一个基本邮件会话,是javamail API最高层入口类。所有其他类都是经由这个Session才得以生效。Session对象从java.util.Properties对象中获取信息,如邮件服务器,接受邮件协议,用户名,密码等信息访问接收邮件服务器上邮件账户的入口,通过他的getFolder方法,可以访问特定的邮件夹代表邮件夹,用于分级组织邮件,通过Folder类可以访问和设置邮件夹中的邮件。,6种主要类续,给据类型指定的邮件发送协议(通常是SMTP),通过指定的邮件发送服务器来发送邮件。Transport是抽象类,它提供一个静态方法send(Message)方法来发送邮件,消息过程,消息,传输,发件人发送一则消息,提交该消息,存储,接收消息,文件夹,将消息存储 Folder 对象中,消息,收件人访问该消息,网络,发送邮件步骤1,step1:设置javaMail的属性创建javax.mail.Properties类的对象,该对象用来设置javaMail的属性,发送邮件步骤2,step2:创建Session实例调用javax.mail.Session类的静态方法Session.getDefaultInstance获取Session实例,该方法根据已经配置好的javaMail属性来创建Session实例,Session 类,Session 类是最高级别的类可以创建共享和非共享会话会话不能有子类存放支持特定协议的 Store 和 Transport 对象能够控制和加载类Session 对象具有用户配置属性,如主机名和用户名,用javamail进行认证发信1,当今mail服务器大多都是通过认证才能发信的.这一点在开发要特别主意,否则发信会失败Javax.mail.Authenticator类:Authenticator 通过用户名和密码访问受保护的资源。对于JavaMail API 来说,这些资源就是邮件服务器 Step1:要使用 Authenticator,先创建一个抽象类的子类,并从 getPasswordAuthentication()方法中返回 PasswordAuthentication 实例,用javamail进行认证发信2,用javamail进行认证发信3,Step2:Step3:,发送邮件步骤3,step3:创建邮件信息,即创建Message对象,Message 类,Message 类,标题属性,Part 接口定义的属性,Message 类添加的属性,主体内容,Data Handler 对象消息的内容,发送邮件步骤4,step4:设置邮件体,登录邮件服务器,javax.mail.Store类Store类实现特定邮件协议上的读、写、监视、查找等操作。通过Javax.mail.Store类可以访问Javax.mail.Folder类。用法:Store store=s.getSorte(pop3);/s为一个邮件会话store.connect(popserver,username,password);/通过你提供的pop地址,用户名和密码登录你的邮箱,Store 类,发件人,发送消息,Store Class类,收件人,收件人 Store,文件夹,消息,收件人登录,Store 验证用户并允许访问视图消息,Folder 类,Folder 类,子文件夹,包含消息,消息,抽象类,关闭状态,import java.util.*;import java.io.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;public class writemessage static String msgText=“请在此处输入文本。此文本为一字符串。;public static void main(String args)Properties p=System.getProperties();p.put(“mail.smtp.host“,host);Session s=Session.getDefaultInstance(p,null);Message m=new MimeMessage(s);Address from=new InternetAddress(String Sender_Email);m.setFrom(from);Address to=new InternetAddress(String Recipient_Email);m.setRecipients(Message.RecipientType.TO,to);m.setSubject(“您好,世界);m.setSentDate(new Date();m.setText(msgText);Transport trans=session.getTransport(“SMTP“);trans.send(m),发送 JavaMail,获得系统属性,设置连接协议并创建会话,新建 Message 对象,并为其设置属性,使用 Transport 类的 send()方法将消息发送给收件人,创建一个 HTML 页面,用于接受邮件服务器名称、发件人地址、收件人地址、主题和消息的内容单击提交之后将此 HTML 转发给 Servlet,Send Mail Servlet 2-1,演示:示例 1,Shop Stop 消息传递服务 欢迎来到 Shop Stop 邮件系统 请输入发送邮件的所有详细信息 邮件服务器:,创建一个 Servlet,用于接受 HTTP 页面上的邮件服务器名称、发件人地址、收件人地址、主题和消息的内容发送邮件,Send Mail Servlet 2-2,演示:示例 2,public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException response.setContentType(CONTENT_TYPE);PrintWriter out=response.getWriter();String smtpServer=request.getParameter(txtserver);String emailTo=request.getParameter(txtto);String fromEmail=request.getParameter(txtfrom);String subject=request.getParameter(txtsubject);String body=request.getParameter(txtmessage);tryProperties props=new Properties();props.put(mail.transport.protocol,smtp);props.put(mail.smtp.host,smtpServer);props.put(mail.smtp.port,25);Session mailsession=Session.getInstance(props);Message msg=new MimeMessage(mailsession);msg.setFrom(new InternetAddress(fromEmail);msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(emailTo);msg.setSentDate(new Date();msg.setSubject(subject);msg.setText(body);Transport.send(msg);msg.writeTo(System.out);out.println(“邮件已成功发送到+emailTo);catch(Exception e)System.out.println(e);out.close();,import java.util.*;import java.io.*;import javax.mail.*;import javax.mail.internet.*;import javax.activation.*;public class writemessage public static void main(String args)Session ses=Session.getDefaultInstance(System.getProperties(),null);Store store=ses.getStore(protocol);store.connect(hostname,username,password)Folder folder=store.getFolder(Inbox);folder.open(Folder.READ_WRITE);Message arraymessage=folder.getMessages();for(int i=0,j=arraymessage.length;ij;i+)arraymessagei.writeTo(System.out);folder.close(false);store.close();,列出 Inbox 中的邮件,获得 Session 对象,获得 Store 对象并连接到 Store,获得默认文件夹并以 Read_Write 模式打开,获得数组中的所有消息,回复消息,Message 类包括 reply()方法reply()方法将 boolean 作为参数此方法将设置新消息的 setForm 或 replyTo 属性Transport 对象的 Send()方法用于发送邮件回复消息的语法为:Message reply=object_message.reply(false);reply.setFrom(new InternetAddress(String email);reply.setText(String text);Transport.send(reply);,Multipart 消息,Multipart 消息是 Message 类的对象内容类型设置为 MultipartMultipart 对象可以获得一个或多个 BodypartBodypart 对象可以获得一个新的 Multipart 对象或 DataHandler Bodypart 对象是 Part 接口的实例化Multipart 消息可以包含纯文本消息或带有附件的 消息,Multipart 消息结构,Multipart 对象,Bodypart 对象,Bodypart 对象,Bodypart 对象,创建一个 HTML 页面,用于接受邮件服务器名称、发件人地址、收件人地址、主题、要附加的文件的位置和消息的内容单击提交之后将 HTML 转发到 Servlet,发送带有附件的邮件,演示:示例 3,Shop Stop 消息传递服务欢迎来到 Shop Stop 邮件系统请输入发送邮件的所有详细信息服务器:,创建一个 Servlet,用于接受服务器名称、发件人地址、收件人地址、要附加的文件的位置、主题和消息的内容发送带有附件的消息,发送带有附件的邮件,演示:示例 4,Properties props=System.getProperties();tryprops.put(mail.smtp.host,host);Session session=Session.getInstance(props,null);MimeMessage message=new MimeMessage(session);message.setFrom(new InternetAddress(from);message.addRecipient(Message.RecipientType.TO,new InternetAddress(to);message.setSubject(subject);MimeBodyPart messageBodyPart=new MimeBodyPart();messageBodyPart.setText(body);Multipart multipart=new MimeMultipart();multipart.addBodyPart(messageBodyPart);messageBodyPart=new MimeBodyPart();DataSource source=new FileDataSource(fileAttachment);messageBodyPart.setDataHandler(new DataHandler(source);messageBodyPart.setFileName(fileAttachment);multipart.addBodyPart(messageBodyPart);message.setContent(multipart);Transport.send(message);out.println(“邮件已成功发送。);,总结 2-1,JavaMail 提供一组抽象类和接口JavaMail 是跨平台和跨协议的,有助于发送和接收邮件Message 类是一个抽象类,具有消息的寻址信息和内容Folder 类是一个抽象类,可以包含子文件夹、消息或两者Store 类是一个抽象类,定义用于访问文件夹和检索消息的协议Session 类是最高级别的类,不能有子类Transport 类的 send()方法用于发送消息Store 对象的 connet()方法用于连接以查看文件夹和消息,总结 2-2,Multipart 消息是 Message 类的对象。其内容类型设置为 MultipartMultipart 消息可以有多个 BodypartBodypart 既可以为纯文本,也可以为附件,