javamail API -- (2)

F.Transport
在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:
Transport.send(message);
当然,方法是多样的。我们也可由Session获得相应协议对应的Transport实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:
message.saveChanges();//implicitwithsend()Transporttransport=session.getTransport("smtp");transport.connect(host,username,password);transport.sendMessage(message,message.getAllRecipients());transport.close();
评论:上面的方法是一个很好的方法,尤其是在我们在同一个邮件服务器上发送多个邮件时。因为这时我们将在连接邮件服务器后连续发送邮件,然后再关闭掉连接。send()这个基本的方法是在每次调用时进行与邮件服务器的连接的,对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。
注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志:
session.setDebug(true)。

G.Store和Folder
接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator。
//Storestore=session.getStore("imap");Storestore=session.getStore("pop3");store.connect(host,username,password);
在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息:
Folderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Messagemessage[]=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()方法接收邮件或是writeTo()方法将邮件保存,getContent()方法只接收邮件内容(不包含邮件头),而writeTo()方法将包括邮件头。
System.out.println(((MimeMessage)message).getContent());
在读取邮件内容后,别忘记了关闭Folder和Store。
folder.close(aBoolean);store.close();
传递给Folder.close()方法的boolean类型参数表示是否在删除操作邮件后更新Folder。

H.继续向前进!
在讲解了以上的七个JavaMail核心类定义和理解了简单的代码片断后,下文将详细讲解怎样使用这些类实现JavaMailAPI所要完成的高级功能。

五、使用JavaMailAPI
在明确了JavaMailAPI的核心部分如何工作后,本人将带领大家学习一些使用JavaMailAPI任务案例。
1.发送邮件
在获得了Session后,建立并填入邮件信息,然后发送它到邮件服务器。这便是使用JavaMailAPI发送邮件的过程,在发送邮件之前,我们需要设置SMTP服务器:通过设置Properties的mail.smtp.host属性。
Stringhost=...;Stringfrom=...;Stringto=...;//GetsystempropertiesPropertiesprops=System.getProperties();//Setupmailserverprops.put("mail.smtp.host",host);//GetsessionSessionsession=Session.getDefaultInstance(props,null);//DefinemessageMimeMessagemessage=newMimeMessage(session);message.setFrom(newInternetAddress(from));message.addRecipient(Message.RecipientType.TO,newInternetAddress(to));message.setSubject("HelloJavaMail");message.setText("WelcometoJavaMail");//SendmessageTransport.send(message);
由于建立邮件信息和发送邮件的过程中可能会抛出异常,所以我们需要将上面的代码放入到try-catch结构块中。

2.接收邮件
为了在读取邮件,我们获得了session,并且连接到了邮箱的相应store,打开相应的Folder,然后得到我们想要的邮件,当然别忘记了在结束时关闭连接。
Stringhost=...;Stringusername=...;Stringpassword=...;//CreateemptypropertiesPropertiesprops=newProperties();//GetsessionSessionsession=Session.getDefaultInstance(props,null);//GetthestoreStorestore=session.getStore("pop3");store.connect(host,username,password);//GetfolderFolderfolder=store.getFolder("INBOX");folder.open(Folder.READ_ONLY);//GetdirectoryMessagemessage[]=folder.getMessages();for(inti=0,n=message.le
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值