



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.JavaMail API JavaMail API的核心类:会话、消息、地址、验证程序、传输,存储和文件夹。所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在ernet包中找到的。 ASession Session类定义了基本的邮件会话。就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。 Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象: Properties props = new Properties(); / fill props with any information Session session = Session.getDefaultInstance(props, null); - 或者使用getInstance()这个静态工厂方法获得自定义的Session: Properties props = new Properties(); / fill props with any information Session session = Session.getInstance(props, null); getDefaultInstance()和getInstance()方法的第二个参数都是null,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。从很多的实例看,在对mail server进行访问的过程中使用共享的Session是足够的,即使是工作在多个用户邮箱的模式下也不例外。 BMessage 当我们建立了Session对象后,便可以被发送的构造信息体了。在这里SUN提供了Message类型来帮助开发者完成这项工作。由于Message是一个抽象类,大多数情况下,我们使用ernet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。 为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入: MimeMessage message = new MimeMessage(session); 注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。 在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。 使用setSubject()方法对邮件设置邮件主题: message.setSubject(Title); 基本的设置信息内容的方法就是通过表示信息内容和MIME类型的参数调用setContent()方法: message.setContent(Hello, text/plain); 然而,如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。 message.setText(Hello); 前面所讲的两种方法,对于文本信息,后者更为合适。而对于其它的一些信息类型,比如HTML信息,则要使用前者。 CAddress 至此,已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。像Message一样,Address类也是一个抽象类,所以我们将使用ernet.InternetAddress这个子类。 通过传入代表邮件地址的字符串,我们可以建立一个邮件地址类: Address address = new InternetAddress(); 如果要在邮件地址后面增加名字的话,可以通过传递两个参数:代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类: Address address = new InternetAddress(, Alvin); 本文在这里所讲的邮件地址类是为了设置邮件信息的发信人和收信人而准备的,在建立了邮件地址类后,我们通过message的setFrom()和setReplyTo()两种方法设置邮件的发信人: message.setFrom(address); message.setReplyTo(address); 若在邮件中存在多个发信人地址,我们可用addForm()方法增加发信人: Address address = .; message.addFrom(address); 为了设置收信人,我们使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量来区分收信人的类型: message.addRecipient(type, address); 下面是Message.RecipientType的三个常量: Message.RecipientType.TO Message.RecipientType.CC Message.RecipientType.BCC 因此,如果我们要发送邮件给A,并发用一个副本给B,下面的方法将被用到: Address toAddress = new InternetAddress(A); Address ccAddress = new InternetAddress(B); message.addRecipient(Message.RecipientType.TO, toAddress); message.addRecipient(Message.RecipientType.CC, ccAddress); JavaMail API并没有提供检查邮件地址有效性的机制。当然我们可以自己完成这个功能:验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。 EAuthenticator 像类那样,JavaMail API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。 在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类。 下面代码片断中的MyAuthenticator就是一个Authenticator的子类。 Properties props = new Properties(); / fill props with any information Authenticator auth = new MyAuthenticator(); Session session = Session.getDefaultInstance(props, auth); FTransport 在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息: Transport.send(message); 当然,方法是多样的。我们也可由Session获得相应协议对应的Transport实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接: message.saveChanges(); / implicit with send() Transport transport = session.getTransport(smtp); transport.connect(host, username, password); transport.sendMessage(message, message.getAllRecipients(); transport.close(); 评论:上面的方法是一个很好的方法,尤其是在我们在同一个邮件服务器上发送多个邮件时。因为这时我们将在连接邮件服务器后连续发送邮件,然后再关闭掉连接。send()这个基本的方法是在每次调用时进行与邮件服务器的连接的,对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。 注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志:session.setDebug(true)。 GStore和Folder 接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator。 / Store store = session.getStore(imap); Store store = session.getStore(pop3); store.connect(host, username, password); 在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息: Folder folder = store.getFolder(INBOX); folder.open(Folder.READ_ONLY); Message message = folder.getMessages(); 上面的例子首先从Store中获得INBOX这个Folder(对于POP3协议只有一个名为INBOX的Folder有效),然后以只读(Folder.READ_ONLY)的方式打开Folder,最后调用Folder的getMessages()方法得到目录中所有Message的数组。 注意:对于POP3协议只有一个名为INBOX的Folder有效,而对于IMAP协议,我们可以访问多个Folder(想想前面讲的IMAP协议)。而且SUN在设计Folder的getMessages()方法时采取了很智能的方式:首先接收新邮件列表,然后再需要的时候(比如读取邮件内容)才从邮件服务器读取邮件内容。 在读取邮件时,我们可以用Message类的getContent()方法接收邮件或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版电商平台销售欠款还款协议
- 二零二五年度二建实务招标合同管理要点及实施细则合同
- 二零二五年度文化产业干股分红及知识产权共享协议书
- 2025版股权债权转让协议书:跨境投资版
- 二零二五年度建筑粉刷合同(含外墙保温、隔热)
- 2025房地产企业绿色建筑项目劳动合同书
- 2025版新能源车辆租赁合作合同
- 二零二五年度商用车辆入股合作合同范本
- 2025版排洪系统防渗漏处理施工合同
- 2025版家庭财产分割与离婚后共同财产分割及子女教育金协议
- 桥架支吊架安装标准图-桥架支吊架图集
- (3.1.1)-野外地质工作安全(一)
- GB/T 845-2017十字槽盘头自攻螺钉
- GB/T 328.20-2007建筑防水卷材试验方法第20部分:沥青防水卷材接缝剥离性能
- FZ/T 01093-2008机织物结构分析方法织物中拆下纱线线密度的测定
- 军工产品技术状态管理讲义课件
- 压力管道安装许可规则-TSG D3001-2021
- 互联网医院建设方案
- SQL注入技术原理及实战
- 东方通——数据中心项目数据交换平台技术方案
- 医学精品课件口腔开髓
评论
0/150
提交评论