电子邮件的发送和接收PPT课件.ppt_第1页
电子邮件的发送和接收PPT课件.ppt_第2页
电子邮件的发送和接收PPT课件.ppt_第3页
电子邮件的发送和接收PPT课件.ppt_第4页
电子邮件的发送和接收PPT课件.ppt_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

可编辑 第13章电子邮件的发送和接收 电子邮件 electronicmail 简称e mail 是因特网上使用最多的一种应用 它为用户在因特网上设立了存放邮件的电子邮箱 发信人可以随时将电子邮件发送到收信人的电子邮箱 收信人也可以随时上网读取 发信人与收信人以异步的方式通信 NetworkProgramming 可编辑 第13章电子邮件的发送和接收 邮件传输原理1 电子邮件系统的构成一个电子邮件系统包括三个主要的构件 即用户代理 邮件消息传输代理 邮件服务器 和电子邮件使用的协议 如图所示 NetworkProgramming 可编辑 第13章电子邮件的发送和接收 2 电子邮件系统的实现 NetworkProgramming 可编辑 13 1E mail协议简介 邮件服务器按照提供的服务类型 可以分为发送邮件服务器 简称发送服务器 和接收邮件服务器 简称接收服务器 发送邮件服务器使用邮件发送协议 现在常用的是SMTP 所以通常发送邮件服务器也称为SMTP服务器 接收邮件服务器使用接收邮件协议 常用的有POP3协议和IMAP协议 所以通常接收邮件服务器也称为POP3服务器或IMAP服务器 NetworkProgramming 可编辑 13 1 1SMTP协议简介 SMTP SimpleMailTransferProtocol 即简单邮件传输协议 是Internet传送E mail的基本协议 也是TCP IP协议组的成员 SMTP协议解决邮件系统如何通过一条链路 把邮件从一台机器传送到另一台机器上的问题 SMTP协议的特点是具有良好的可伸缩性 这也是它成功的关键 它既适用于广域网 也适用于局域网 SMTP协议由于非常简单 使得它得到了广泛的运用 在Internet上能够发送邮件的服务器几乎都支持SMTP协议 NetworkProgramming 可编辑 13 1E mail协议简介 NetworkProgramming 可编辑 13 1 1SMTP协议简介 SMTP协议采用C S模式 专用于电子邮件的发送 规定了发信人把邮件发送到收信人的电子邮箱的全过程中 SMTP客户与SMTP服务器这两个相互通信的进程之间应如何交换信息 即规定了SMTP的会话过程 用户直接使用的是用于编写和发送的客户端软件 而通常的SMTP服务器运行在远程站点上 客户 服务器之间的通信是通过TCP IP协议进行的 SMTP的命令和响应都是基于文本 以命令行为单位 换行符为CR LF 响应信息一般只有一行 由一个3位数的代码开始 后面可附上很简短的文字说明 SMTP要经过建立连接 传送邮件和释放连接3个阶段 具体如下 NetworkProgramming 可编辑 13 1 1SMTP协议简介 具体为 1 建立TCP连接 2 客户端向服务器发送HELLO命令以标识发件人自己的身份 然后客户端发送MAIL命令 3 服务器端以OK作为响应 表示准备接收 4 客户端发送RCPT命令 说明收信人的电子邮件地址 5 服务器端表示是否愿意为收件人接收邮件 6 协商结束 发送邮件 用命令DATA发送输入内容 7 结束此次发送 用QUIT命令退出 电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的 SMTP通过用户代理程序 UA 完成邮件的编辑 收取和阅读等功能 通过邮件传输代理程序 MTA 将邮件传送到目的地 NetworkProgramming 可编辑 13 1 2POP3协议简介 POP3 PostOfficeProtocol3 即邮局协议的第3个版本 它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议 它是因特网电子邮件的第一个离线协议标准 POP3协议允许用户从服务器上把邮件存储到本地主机 即自己的计算机 上 同时根据客户端的操作删除或保存在邮件服务器上的邮件 而POP3服务器则是遵循POP3协议的接收邮件服务器 用来接收电子邮件的 POP3协议是TCP IP协议族中的一员 由RFC1939定义 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件 NetworkProgramming 可编辑 13 1 3IMAP协议简介 InternetMailAccessProtocol互联网邮件访问协议 IMAP协议它的主要作用是邮件客户端 例如MSOutlookExpress 可以通过这种协议从邮件服务器上获取邮件的信息 下载邮件等 它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载 可以通过客户端直接对服务器上的邮件进行操作 用户可以通过浏览信件头来决定是否收取 删除和检索邮件的特定部分 还可以在服务器上创建或更改文件夹或邮箱 它除了支持POP3协议的脱机操作模式外 还支持联机操作和断连接操作 它为用户提供了有选择的从邮件服务器接收邮件的功能 基于服务器的信息处理功能和共享信箱功能 NetworkProgramming 可编辑 13 1 4MIME简介 MIME MultipurposeInternetMailExtensions 多用途Internet邮件扩充标准 不是邮件传输协议 而是对邮件格式所作的规范 它扩展了电子邮件标准 使其能够支持非ASCII字符 二进制格式附件等多种格式的邮件消息 MIME规定了用于表示各种各样的数据类型的符号化方法 MIME是通过标准化电子邮件报文的头部的附加领域 fields 而实现的 这些头部的附加领域 描述新的报文类型的内容和组织形式 NetworkProgramming 可编辑 13 1 4MIME简介 NetworkProgramming 可编辑 13 1 4MIME简介 内容类型 Content Type 这个头部领域用于指定消息的类型type有下面的形式 Text 用于标准化地表示的文本信息 文本消息可以是多种字符集和或者多种格式的 Multipart 用于连接消息体的多个部分构成一个消息 这些部分可以是不同类型的数据 Application 用于传输应用程序数据或者二进制数据 Message 用于包装一个E mail消息 Image 用于传输静态图片数据 Audio 用于传输音频或者音声数据 Video 用于传输动态影像数据 可以是与音频编辑在一起的视频数据格式 NetworkProgramming 可编辑 13 2JavaMailAPI简介 SUN公司制定了JavaMailAPI 它封装了按照各种邮件通信协议 如IMAP POP3和SMTP 与邮件服务器通信的细节 为Java应用程序提供了收发电子邮件的公共接口 参见图 NetworkProgramming 可编辑 13 2JavaMailAPI简介 JavaMailAPI主要位于javax mail包和javax mail internet中 图为其中主要类的类框图 NetworkProgramming 可编辑 13 2JavaMailAPI简介 1 javax mail Session类 表示邮件会话 是JavaMailAPI的最高层入口类 Session类定义了基本的邮件会话 就像Http会话那样 我们进行收发邮件的工作都是基于这个会话的 Session对象利用了java util Properties对象获得了邮件服务器 用户名 密码信息和整个应用程序都要使用到的共享信息 Session类的构造方法是私有的 所以我们可以使用Session类提供的getDefaultInstance 这个静态工厂方法获得一个默认的Session对象 Propertiesprops newProperties Sessionsession Session getDefaultInstance props null NetworkProgramming 可编辑 13 2JavaMailAPI简介 2 javax mail Store类 表示接收邮件服务器上的注册用户的存储空间 通过Store类的getFolder 方法 可以访问用户的特定邮件夹 通过javax mail Store类可以访问javax mail Folder类 我们需要从Session中获取特定类型的Store 然后连接到Store 在连接Store的过程中 极有可能需要用到用户名 密码或者Authenticator Storestore session getStore imap Storestore session getStore pop3 store connect host username password NetworkProgramming 可编辑 13 2JavaMailAPI简介 3 javax mail Folder类代表邮件夹 邮件都放在邮件夹中 Folder提供了管理邮件夹及邮件的各种方法在连接到Store后 一个Folder对象即目录对象将通过Store的getFolder 方法被返回 我们可从这个Folder中读取邮件信息 Folderfolder store getFolder INBOX folder open Folder READ ONLY NetworkProgramming 可编辑 13 2JavaMailAPI简介 4 javax mail Message类代表电子邮件 封装了实际email消息的所有细节 如标题 发送 接收地址 发送日期等 提供了读取和设置邮件内容的方法 Message是一个抽象类 大多数情况下 我们使用javax mail internet MimeMessage这个子类 该类是使用MIME类型 MIME信息头的邮箱信息 为了建立一个MimeMessage对象 我们必须将Session对象作为MimeMessage构造方法的参数传入 MimeMessagemessage newMimeMessage session message setFrom newInternetAddress from message addRecipient Message RecipientType TO newInternetAddress to message setSubject HelloJavaMail message setText WelcometoJavaMail NetworkProgramming 可编辑 13 2JavaMailAPI简介 5 javax mail Address类 邮件地址类 像Message一样 Address类也是一个抽象类 所以我们将使用javax mail internet InternetAddress这个子类 通过传入代表邮件地址的字符串 我们可以建立一个邮件地址类 Addressaddress newInternetAddress president whitehouse gov NetworkProgramming 可编辑 13 2JavaMailAPI简介 6 javax mail Transport类 在发送信息时 Transport类将被用到 这个类实现了发送信息的协议 通称为SMTP 此类是一个抽象类 我们可以使用这个类的静态方法send 来发送消息 Transporttransport session getTransport smtp transport connect host username password transport sendMessage message message getAllRecipients transport close NetworkProgramming 可编辑 13 2JavaMailAPI简介 7 javax mail Authenticator类 像类那样 JavaMailAPI通过使用授权者类 Authenticator是一个抽象类 以用户名 密码的方式访问那些受到保护的资源 在这里 资源 就是指邮件服务器 下面代码片断中的MyAuthenticator就是一个Authenticator的子类 Propertiesprops newProperties Authenticatorauth newMyAuthenticator Sessionsession Session getDefaultInstance props auth NetworkProgramming 可编辑 13 3建立JavaMail应用程序的开发环境 JDK中并不包含JavaMailAPI 为了开发JavaMail应用程序 需要从SUN公司的网站下载JavaMailAPI及其实现的类库 该类库由两个JAR文件组成 mail jar和activation jar NetworkProgramming 可编辑 13 3建立JavaMail应用程序的开发环境 1 安装JavaMail为了使用JavaMailAPI 需要从 NetworkProgramming 可编辑 13 3建立JavaMail应用程序的开发环境 2 安装JavaBeansActivationFramework从 NetworkProgramming 可编辑 13 4创建JavaMail应用程序 JavaMail应用程序在初始化过程中需要执行如下步骤 步骤 1 设置JavaMail属性 Propertiesprops newProperties props put mail transport protocol smtp 指定邮件发送协议props put mail store protocol imap 指定邮件接收协议props put mail smtp class com sun mail smtp SMTPTransport 指定支持SMTP协议的Transport具体类 允许由第三方提供 props put mail imap class com sun mail imap IMAPStore 指定支持IMAP协议的Store具体类 允许由第三方提供 props put mail smtp host hostname 指定采用SMTP协议的邮件发送服务器的IP地址或主机名 NetworkProgramming 可编辑 13 4创建JavaMail应用程序 步骤 2 调用javax mail Session类的静态方法Session getDefaultInstance 获得Session实例 该方法根据已经配置的JavaMail属性来创建Session实例 Sessionmailsession Session getDefaultInstance props 步骤 3 调用Session的getStore Stringprotocol 方法来获得Store对象 参数protocol指定接收邮件协议 Storestore mailsession getStore imap 步骤 1 把mail imap class属性设为com sun mail imap IMAPStore 因此以上getStore 方法返回com sun mail imap IMAPStore类的实例 NetworkProgramming 可编辑 13 4创建JavaMail应用程序 步骤 4 调用Store对象的connect 方法连接到接收邮件服务器 调用connect 方法时 应该指定接收邮件服务器的主机名或IP地址 用户名和口令 store connect hostname username password NetworkProgramming 可编辑 13 4创建JavaMail应用程序 获得了Store对象后 就可以通过它来访问邮件服务器上的特定邮件用户了 通常会对邮件用户执行以下操作 操作 一 创建并发送邮件 创建邮件msg newMimeMessage mailsession InternetAddress toAddrs InternetAddress parse admin false 设置邮件接收者msg setRecipients Message RecipientType TO toAddrs 设置邮件的主题msg setSubject hello NetworkProgramming 可编辑 13 4创建JavaMail应用程序 设置邮件的发送者msg setFrom newInternetAddress admin 设置邮件的正文msg setText Howareyou 发送邮件Transport send msg Transport的静态方法send Message 负责发送邮件服务器 邮件发送协议由mail transport protocol属性指定 邮件发送服务器由mail smtp host属性指定 NetworkProgramming 可编辑 13 4创建JavaMail应用程序 操作 二 打开inbox邮件夹收取邮件 获得名为 inbox 的邮件夹Folderfolder store getFolder inbox 打开邮件夹folder open Folder READ ONLY 获得邮件夹中的邮件数目System out println Youhave folder getMessageCount messagesininbox 获得邮件夹中的未读邮件数目System out println Youhave folder getUnreadMessageCount unreadmessagesininbox 在IMAP协议中 inbox邮件夹是邮件用户的保留邮件夹 用户不允许删除该邮件夹 邮件服务器把所有接收到的新邮件都存在该邮件夹中 NetworkProgramming 可编辑 13 4创建JavaMail应用程序 操作 三 从邮件夹中读取邮件 从邮件夹中读取第一封邮件Messagemsg folder getMessage 1 System out println thefirstmessageininbox 获得邮件的发送者 主题和正文System out println From msg getFrom 0 System out println Subject msg getSubject System out println Text msg getText NetworkProgramming 可编辑 13 5身份验证 在实际应用中 往往希望在连接邮件服务器时 弹出一个对话框 提示用户输入用户名和口令 为了达到这一效果 需要按照以下步骤创建和使用javax mail Authenticator类 1 创建一个javax mail Authenticator类的子类 假定名为MailAuthenticator 实现getPasswordAuthentication 方法 2 创建MailAuthenticator对象 并且把它作为参数传给Session的getDefaultInstance 方法 Authenticatorma newMailAuthenticator Sessionsession Session getDefaultInstance props ma 3 连接到接收邮件服务器时 把用户名和口令设为null store connect receiveHost null null NetworkProgramming 可编辑 13 5身份验证 NetworkProgramming 可编辑 13 6URLName类 javax mail URLName类表示URL的名字 URLName类与 URL类的区别在于 URLName类不尝试连接目标地址 构造URLName对象时 无需指定协议处理器 URLName类可以表示非标准的URL地址 比如URLName对象可以表示接收邮件服务器上的特定邮件夹 形式为 协议名 用户名 口令 主机 端口 邮件夹 NetworkProgramming 可编辑 13 6URLName类 URLName类中包括以下getXXX 方法 getProtocol 获得URL名字中的协议 getHost 获得URL名字中的主机 getUsername 获得URL名字中的用户名 getPassword 获得URL名字中的口令 getFile 获得URL名字中的文件名或者邮件夹名 NetworkProgramming 可编辑 13 6URLName类 URLName类中包括以下getXXX 方法 getProtocol 获得URL名字中的协议 getHost 获得URL名字中的主机 getUsername 获得URL名字中的用户名 getPassword 获得URL名字中的口令 getFile 获得URL名字中的文件名或者邮件夹名 NetworkProgramming 可编辑 13 6URLName类 例程14 5的MailClientURLName类的init URLNameurlName 方法从一个URLName对象中获取连接到接收邮件服务器的各种信息 这个URLName对象表示的URL名字为 imap admin 1234 localhost publicvoidinit URLNameurlName throwsException receiveProtocol urlName getProtocol receiveHost urlName getHost username urlName getUsername password urlName getPassword NetworkProgramming 可编辑 13 6URLName类 设置属性Propertiesprops newProperties props put mail smtp host sendHost 创建Session对象session Session getDefaultInstance props 创建Store对象store session getStore receiveProtocol 连接到邮件服务器store connect receiveHost username password NetworkProgramming 可编辑 13 7创建和读取复杂电子邮件 如图所示 按照MIME规范 电子邮件包括邮件头和正文两部分 邮件头中包括日期 发送者地址 接收者地址和主题等信息 正文部分可以包括普通文本内容 还可以包括一个或多个附件 NetworkProgramming 可编辑 13 7创建和读取复杂电子邮件 javax mail Message抽象类表示邮件 它的具体子类为javax mail MimeMessage类 它提供了读取和设置邮件中各个部分的getXXX 和setXXX 方法 setSubject Stringsubject 方法设置邮件的主题 setHeader Stringname Stringvalue 方法设置邮件头部的某一项 setContent Objecto Stringtype 方法设置邮件的正文 NetworkProgramming 可编辑 13 7 1邮件地址 javax mail Address抽象类表示邮件地址 它的最常用的子类是javax mail InternetAddress类 InternetAddress类表示Internet网上通用的邮件地址 形式为admin 或者 Admin InternetAddress类提供了一系列get和set方法 用来读取和设置address personal和charset等属性 例如 getAddress 读取address属性 getPersonal 读取personal属性 setAddress Stringaddress 设置address属性 setPersonal Stringpersonal 设置personal属性 NetworkProgramming 可编辑 13 7 1邮件地址 以下两段代码是等价的 InternetAddressaddr newInternetAddress admin Admin 或者 InternetAddressaddr newInternetAddress addr setAddress admin addr setPersonal Admin NetworkProgramming 可编辑 13 7 1邮件地址 MimeMessage类的以下方法用于读取或设置邮件中的地址信息 Address getFrom 读取发送者的邮件地址 Address getRecipients Message RecipientTypetype 读取特定接收类型的邮件地址 voidsetFrom Addressaddress 设置发送者的邮件地址 voidsetRecipients Message RecipientTypetype Address addresses 设置特定接收类型的邮件地址 参数addresses指定多个接收地址 voidsetRecipients Message RecipientTypetype Stringaddresses 设置特定接收类型的邮件地址 参数addresses指定一个接收地址 NetworkProgramming 可编辑 13 7 1邮件地址 Message RecipientType类型的静态常量表示地址类型 包括 Message RecipientType TO 主接收地址 Message RecipientType CC 抄送地址 Message RecipientType BCC 广播地址 NetworkProgramming 可编辑 13 7 1邮件地址 以下程序代码设置了邮件的各项邮件地址 MimeMessagemsg newMimeMessage session InternetAddressfrom newInternetAddress admin InternetAddress to InternetAddress parse admin java mail InternetAddresscc newInternetAddress linda j2ee InternetAddress bcc InternetAddress parse abc xyz msg setFrom from msg setRecipients Message RecipientType TO to msg setRecipients Message RecipientType CC cc msg setRecipients Message RecipientType BCC bcc NetworkProgramming 可编辑 13 7 2邮件头部 MimeMessage类的以下getXXX 和setXXX 方法用于读取和设置邮件头部的特定项 String getHeader Stringname voidsetHeader Stringname Stringvalue 以下两段代码的作用是等价的 它们的作用都是设置邮件的主题 msg setHeader subject hello 或者 msg setSubject hello NetworkProgramming 可编辑 13 7 2邮件头部 MimeMessage类的getAllHeaders 方法返回一个包含Header对象的Enumeration对象 每个Header对象表示邮件头部的一项 以下程序代码遍历邮件头部的所有项 for Enumeratione msg getAllHeaders e hasMoreElements Headerheader e nextElement System out println header getName header getValue NetworkProgramming 可编辑 13 7 3邮件标记 多数接收邮件服务器允许邮件包含特定的标记信息 这些标记可以使用户更方便的管理邮件 JavaMailAPI用javax mail Flags类的Flags Flag内部类的静态实例来表示标记 Flags Flag ANSWERED 表示邮件已经回复 该标记由客户程序设置 Flags Flag DELETED 表示邮件已经被删除 该标记由客户程序设置 Flags Flag RECENT 表示刚刚被添加到邮件夹的邮件 即最近一次打开邮件夹时 被添加到邮件夹的邮件 该标记由Folder类的实现来设置 客户程序只能读取该标记 NetworkProgramming 可编辑 13 7 3邮件标记 Flags Flag FLAGGED 表示邮件已经作了某种标记 客户程序可以设置该标记 Flags Flag SEEN 表示邮件已经被阅读 该标记由JavaMailAPI的实现来设置 当客户程序调用了邮件的getContent 方法时 该邮件被加上Flags Flag SEEN标记 客户程序可以修改这个标记 Flags Flag DRAFT 表示邮件是草稿 该标记由客户程序设置 Flags Flag USER 表示邮件所在的邮件夹支持用户自定义的标记 该标记由接收邮件服务器设置 客户程序只能读取该标记 客户程序可以通过folder getPermanentFlags contains Flags Flag USER 方法判断邮件夹是否支持用户自定义的标记 NetworkProgramming 可编辑 13 7 3邮件标记 MimeMessage类提供了三个与标记有关的方法 voidsetFlags Flagsflags booleanset 设置或取消一组标记 voidsetFlags Flags Flag booleanset 设置或取消特定标记 booleanisSet Flags Flagflag 察看是否设置了某个标记 NetworkProgramming 可编辑 13 7 3邮件标记 以下两段程序代码是等价的 它们的作用都是为一个邮件设置SEEN和ANSWERED标记 Flagsflags newFlags flags add Flags Flag SEEN flags add Flags Flag ANSWERED msg setFlags flags true 或者 msg setFlags Flags Flag SEEN true msg setFlags Flags Flag ANSWERED true NetworkProgramming 可编辑 13 7 3邮件标记 如果邮件所在的邮件夹支持用户标记 还可以通过以下方式为邮件加上具有特殊含义的用户标记 Flagsflags newFlags flags add privateemail flags add abouttravelling msg setFlags flags true 表示这是一封关于旅游的私人信件 NetworkProgramming NetworkProgramming 可编辑 13 7 3邮件标记 以下程序代码察看邮件的所有标记 if msg isSet Flags Flag DELETED System out println DELETED elseif msg isSet Flags Flag SEEN System out println SEEN elseif msg isSet Flags Flag ANSWERED System out println ANSWERED elseif msg isSet Flags Flag RECENT System out println RECENT NetworkProgramming 可编辑 13 7 3邮件标记 elseif msg isSet Flags Flag DRAFT System out println DRAFT elseif msg isSet Flags Flag FLAGGED System out println FLAGGED elseif msg isSet Flags Flag USER 读取用户标记String userFlags msg getFlags getUserFlags for inti 0 i userFlags length i System out println UserFlag userFlags i NetworkProgramming 可编辑 13 7 4邮件正文 邮件正文是邮件中最复杂的一部分 正文可以是纯文本 还可以包括若干附件 JavaMailAPI把邮件正文的各个组成部分以及整个邮件都抽象为部件 部件用javax mail Part接口表示 一个Part对象和一个DataHandler对象关联 DataHandler对象负责处理部件包含的数据 Part接口有两个子接口 MimePart接口和BodyPart接口 MimePart接口表示符合MIME规范的部件 BodyPart接口表示可以作为邮件正文的组成部分的部件 NetworkProgramming 可编辑 13 7 4邮件正文 Part接口及其相关类的类框图 NetworkProgramming 可编辑 13 7 4邮件正文 MimeBodyPart类实现了MimePart接口和BodyPart接口 因此MimeBodyPart对象可以作为MimeMessage的正文的组成部分 MimeMessag类的以下三个方法都用于设置正文 voidsetText Strinttxt voidsetContent Objecto Stringtype voidsetContent Multipartmp NetworkProgramming 可编辑 13 7 4邮件正文 如果MimeMessage仅包含纯文本内容 可以通过以下两种方式设置邮件正文 msg setText Howareyou 或者msg setContent Howareyou text plain 如果MimeMessage的正文包括多个组成部分 既有纯文本内容 还有若干附件 那就应该先创建一个包含正文的各个组成部分的MimeMultipart对象 然后调用msg setContent Multipartmp 方法 把MimeMultipart对象作为邮件的正文 NetworkProgramming 可编辑 13 7 4邮件正文 例程的MailClientSendAttach类创建了一个包括附件的邮件 然后发送该邮件 这封邮件的正文包括三个组成部分 分别用三个MimeBodyPart对象来表示 第一个MimeBodyPart对象表示邮件的纯文本内容 其他两个MimeBodyPart对象分别表示两个附件 这些MimeBodyPart对象都加入到一个MimeMultipart对象中 NetworkProgramming NetworkProgramming 可编辑 13 7 4邮件正文 例程MailClientSendAttach javaimportjavax mail importjavax mail internet importjavax activation importjava util publicclassMailClientSendAttachextendsMailClientForCitiz privateStringfromAddr java mail 发送者地址privateStringtoAddr java mail 接收者地址 NetworkProgramming NetworkProgramming 可编辑 13 7 4邮件正文 publicvoidsendMessage StringfromAddr StringtoAddr throwsException 创建一个邮件Messagemsg newMimeMessage session InternetAddress toAddrs InternetAddress parse toAddr false msg setRecipients Message RecipientType TO toAddrs msg setSubject hello msg setSentDate newDate msg setFrom newInternetAddress fromAddr NetworkProgramming 可编辑 13 7 4邮件正文 Stringattch1 attch1 rar Stringattch2 attch2 rar Multipartmultipart newMimeMultipart 加入文本内容MimeBodyPartmimeBodyPart1 newMimeBodyPart mimeBodyPart1 setText Howareyou multipart addBodyPart mimeBodyPart1 NetworkProgramming 可编辑 13 7 4邮件正文 加入第一个附件MimeBodyPartmimeBodyPart2 newMimeBodyPart FileDataSourcefds newFileDataSource attch1 得到数据源mimeBodyPart2 setDataHandler newDataHandler fds mimeBodyPart2 setDisposition Part ATTACHMENT 标识本部件为附件mimeBodyPart2 setFileName fds getName 设置文件名 与原文件名同 multipart addBodyPart mimeBodyPart2 将附件添加到正文对象 NetworkProgramming 可编辑 13 7 4邮件正文 加入第二个附件MimeBodyPartmimeBodyPart3 newMimeBodyPart fds newFileDataSource attch2 得到数据源mimeBodyPart3 setDataHandler newDataHandler fds mimeBodyPart3 setDisposition Part ATTACHMENT mimeBodyPart3 setFileName fds getName 设置文件名multipart addBodyPart mimeBodyPart3 msg setContent multipart 设置邮件的正文Transport send msg 发送邮件 NetworkProgramming 可编辑 13 7 4邮件正文 publicstaticvoidmain String args throwsException MailClientSendAttachclient newMailClientSendAttach client init client sendMessage client fromAddr client toAddr client close NetworkProgramming 可编辑 13 7 5邮件接收 例程的MailClientReadAttach类的processMessage Messagemsg 方法演示如何解析并处理可能包括附件的邮件 publicstaticvoidprocessMessage Messagemsg throwsException processMessageHeader msg 处理邮件头部Objectbody msg getContent 获得邮件正文if bodyinstanceofMultipart processMultipart Multipart body else processPart msg NetworkProgramming 可编辑 13 7 5邮件接收 处理邮件头部 publicstaticvoidprocessMessageHeader Messagemsg throwsException for Enumeratione msg getAllHeaders e hasMoreElements Headerheader e nextElement System out println header getName header getValue NetworkProgramming 可编辑 13 7 5邮件接收 邮件正文 附件的获取 从消息中获取附件比发送它们棘手些 因为MIME没有简单的关于附件的概念 当消息包含附件时 消息的内容是个Multipart对象 接着 您需要处理每个Part 获取主要内容和附件 标有从part getDisposition 获得的Part ATTACHMENT配置 disposition 的部件 Part 无疑就是附件 但是 没有配置 以及一个非文本MIME类型 和带Part INLINE配置的部件也可能是附件 当配置要么是Part ATTACHMENT 要么是Part INLINE时 这个消息部件的内容就能被保存 只要用getFileName 和getInputStream 就能分别得到原始文件名和输入流 NetworkProgramming 可编辑 13 7 5邮件接收 邮件正文 publicstaticvoidprocessMultipart Multipartmp throwsException for inti 0 i mp getCount i Miltipart的数量 比如多个附件processPart mp getBodyPart i publicstaticvoidprocessPart Partpart throwsException StringfileName part getFileName Stringdisposition part getDisposition StringcontentType part getContentType System out println fileName fileName System out println disposition disposition System out println contentType contentType NetworkProgramming 可编辑 13 7 5邮件接收 邮件正文 if disposition null NetworkProgramming 可编辑 13 7 5邮件接收 邮件正文 if fileName null 如果不是附件 打印到控制台part writeTo System out System out println else Filefile newFile fileName 创建一个在文件系统中不存在的文件for inti 1 file exists i StringnewName i fileName file newFile newName NetworkProgramming 可编辑 13 7 5邮件接收 邮件正文 把附件保存到一个文件中OutputStre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论