• 1. 第八章JavaMail 和 Servlet
  • 2. JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧回顾2
  • 3. 目标使用 JavaMail API 描述 JavaMail 会话和消息 使用 Transport 对象 创建 Send Mail Servlet 描述 Web Mail Servlet3
  • 4. JavaMail APIJavaMail API 抽象类的 集合跨平台和跨协议提供发送和接收 JavaMail 的功能SMTP 服务器用于发送邮件POP3 和 IMAP 服务器用于接收邮件JavaMail 用于通过网络或 Internet 发送和接收邮件4
  • 5. JavaMail 组件JavaMail APIJavaMail抽象类层Internet 实现层J2EE组件邮件服务器(POP3/SMTP/IMTP协议实现层)5
  • 6. 类结构MessageStoreSessionFolderJavaMail 类6
  • 7. Message 类 Message 类 (创建要发送的消息) 标题属性Part 接口定义的属性Message 类添加的属性主体内容Data Handler 对象 消息的内容7
  • 8. Folder 类Folder 类(分级组织邮件)子文件夹包含消息消息抽象类关闭状态8
  • 9. Store 类发件人发送消息Store Class类收件人收件人 Store文件夹消息收件人登录Store 验证用户并允许访问视图消息9
  • 10. Session 类Session 类是最高级别的类(入口类,获取邮件服务器、用户名、密码等) 可以创建共享和非共享会话 会话不能有子类 存放支持特定协议的 Store 和 Transport 对象 能够控制和加载类 Session 对象具有用户配置属性,如主机名和用户名10
  • 11. 消息过程 消息 传输发件人发送一则消息提交该消息存储接收消息文件夹将消息存储 Folder 对象中 消息收件人访问该消息 网络11
  • 12. 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() 方法将消息发送给收件人12
  • 13. 创建一个 HTML 页面,用于接受邮件服务器名称、发件人地址、收件人地址、主题和消息的内容 单击提交之后将此 HTML 转发给 ServletSend Mail Servlet 2-1演示:示例 1 Shop Stop 消息传递服务

    欢迎来到 Shop Stop 邮件系统

    13
  • 14. 创建一个 Servlet,用于接受 HTTP 页面上的邮件服务器名称、发件人地址、收件人地址、主题和消息的内容 发送邮件Send Mail Servlet 2-2演示:示例 2public 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"); try { Properties 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,InternetAddres s.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(); } 14
  • 15. 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; i
  • 16. 回复消息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);16
  • 17. Multipart 消息Multipart 消息是 Message 类的对象 内容类型设置为 Multipart Multipart 对象可以获得一个或多个 Bodypart Bodypart 对象可以获得一个新的 Multipart 对象或 DataHandler Bodypart 对象是 Part 接口的实例化 Multipart 消息可以包含纯文本消息或带有附件的 消息 17
  • 18. Multipart 消息结构Multipart 对象Bodypart 对象Bodypart 对象Bodypart 对象18
  • 19. 创建一个 HTML 页面,用于接受邮件服务器名称、发件人地址、收件人地址、主题、要附加的文件的位置和消息的内容 单击提交之后将 HTML 转发到 Servlet发送带有附件的邮件演示:示例 3 Shop Stop 消息传递服务

    欢迎来到 Shop Stop 邮件系统

  • 请输入发送邮件的 所有详细信息
    邮件服务器:  
    19
  • 20. 创建一个 Servlet,用于接受服务器名称、发件人地址、收件人地址、要附加的文件的位置、主题和消息的内容 发送带有附件的消息 发送带有附件的邮件演示:示例 4… Properties props = System.getProperties(); try { props.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(“

    邮件已成功发送。

    "); }20
  • 21. 总结 2-1 JavaMail 提供一组抽象类和接口 JavaMail 是跨平台和跨协议的,有助于发送和接收邮件 Message 类是一个抽象类,具有消息的寻址信息和内容 Folder 类是一个抽象类,可以包含子文件夹、消息或两者 Store 类是一个抽象类,定义用于访问文件夹和检索消息的协议 Session 类是最高级别的类,不能有子类 Transport 类的 send() 方法用于发送消息 Store 对象的 connet() 方法用于连接以查看文件夹和消息21
  • 22. 总结 2-2Multipart 消息是 Message 类的对象。其内容类型设置为 Multipart Multipart 消息可以有多个 Bodypart Bodypart 既可以为纯文本,也可以为附件22
  • 请输入发送邮件的 所有详细信息
    服务器:  
    收件人: