⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0215.htm

📁 JspServlet教程专栏 对javaservlet讲述的非常详细
💻 HTM
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>用Java Mail API查看邮件</strong></big></p>
<div align="right">---摘自互联网</div>

<br>看过在jsp中调用javamail后发现里面只有发邮件,没有收看邮件,且在收看邮件时有个很麻烦的内码转换问题,所以写这篇文章出来给大家看看。如有错误请写信给我。<br>
使用Java&nbsp; Mail&nbsp; API的方法,主要的操作过程为:<br>
●&nbsp; 获取javax.mail.Session实例,并进而获得javax.mail.Store实例。<br>
●&nbsp; 利用javax.mail.Store实例获得缺省收件箱(INBOX)javax.mail.Folder实例。<br>
●&nbsp; 使用javax.mail.Folder对象提取新邮件,存储为javax.mail.Message对象数组。<br>
●&nbsp; 创建javax.mail.FetchProfile以(潜在地)优化对特定邮件组成成分的提取。<br>
这里的javax.mail.FetchProfile类提供邮件协议提供者可选参数,其目的是更有效地实现邮件组成成分的预提取。<br>
一个例子:<br>
&lt;%@&nbsp; page&nbsp; language="java"&nbsp; contentType="text/html;charset=gb2312"&nbsp; %><br>
&lt;%@&nbsp; page&nbsp; import="java.util.*,java.io.*,java.text.*"&nbsp; %><br>
&lt;%@&nbsp; page&nbsp; import="javax.mail.*,javax.mail.internet.*,javax.activation.*"&nbsp; %><br>
&lt;%!<br>
private&nbsp; String&nbsp; getDisplayAddress(Address&nbsp; a)&nbsp; //转换RFC822为Unicode<br>
{&nbsp; String&nbsp; pers&nbsp; =&nbsp; null;<br>
String&nbsp; addr&nbsp; =&nbsp; null;<br>
if(a&nbsp; instanceof&nbsp; InternetAddress&nbsp; &&((pers=((InternetAddress)a).getPersonal())!=null))<br>
addr=pers+"&nbsp; "+"&lt;"+((InternetAddress)a).getAddress()+"&gt;";<br>
<br>
else&nbsp; <br>
addr&nbsp; =&nbsp; a.toString();<br>
return&nbsp; addr;<br>
}<br>
%><br>
&lt;%<br>
Session&nbsp; mailsession=Session.getInstance(System.getProperties(),null);<br>
mailsession.setDebug(false);<br>
Store&nbsp; store=mailsession.getStore(protocol);//protocol为连接协议,IMAP或是POP<br>
store.connect(mailhost,-1,user,passwd);//mailhost主机,user为用户名,passwd为密码<br>
Folder&nbsp; folder&nbsp; =&nbsp; store.getFolder("INBOX");<br>
try&nbsp; <br>
{&nbsp; folder.open(Folder.READ_WRITE);}&nbsp; <br>
catch&nbsp; (MessagingException&nbsp; ex)&nbsp; <br>
{&nbsp; folder.open(Folder.READ_ONLY);}<br>
Message&nbsp; message[]=folder.getMessages();<br>
FetchProfile&nbsp; fp=new&nbsp; FetchProfile();<br>
fp.add(FetchProfile.Item.ENVELOPE);<br>
fp.add(FetchProfile.Item.FLAGS);<br>
fp.add("X-Mailer");<br>
folder.fetch(message,fp);<br>
int&nbsp; id=0,j=0;<br>
for(int&nbsp; i=0;i&lt;request.getParameter("id").length();i++)//假设要阅读第ID个邮件。<br>
id=id*10+(request.getParameter("id").charAt(i)-48);<br>
for(j=0;j&lt;id;j++);<br>
message[j].setFlag(Flags.Flag.SEEN,true);<br>
out.println("&lt;table&nbsp; width=\"550\"&nbsp; border=\"1\"&nbsp; cellpadding=\"0\"&nbsp; cellspacing=\"0\"&nbsp; borderColorDark=\"#eaf0ff\"&nbsp; borderColorLight=\"#000000\"&nbsp; align=\"center\">");<br>
out.println("&lt;tr>");<br>
out.println("&lt;td&nbsp; width=60>主题:&lt;/td>&lt;td&nbsp; width=490>&nbsp;"+message[j].getSubject()+"&nbsp;&lt;/td>&lt;/tr>");<br>
String&nbsp; from=new&nbsp; String();<br>
Address[]&nbsp; fr=message[j].getFrom();<br>
if(fr!=null)<br>
{&nbsp; boolean&nbsp; tf=true;<br>
for(int&nbsp; i=0;i&lt;fr.length;i++)<br>
from=from+getDisplayAddress(fr);<br>
}<br>
out.println("&lt;tr>&lt;td&nbsp; width=60>来自:&lt;/td>&lt;td&nbsp; width=490>&nbsp;"+from+"&nbsp;&lt;/td>&lt;/tr>");<br>
out.println("&lt;tr>&lt;td&nbsp; colspan=\"2\">&nbsp;&lt;div&nbsp; align=\"center\">&lt;b>内容&lt;/b>&lt;/div>&lt;br>");<br>
Object&nbsp; o=message[j].getContent();<br>
if&nbsp; (message[j].isMimeType("text/plain"))&nbsp; //若其Type为tex/plain就可直接读出了。<br>
out.println((String)o+"&lt;/td>");<br>
else&nbsp; if(message[j].isMimeType("multipart/*"))<br>
{&nbsp; Multipart&nbsp; mp=(Multipart)o;<br>
Part&nbsp; part=mp.getBodyPart(0);<br>
String&nbsp; msg=(String)part.getContent();<br>
StringBuffer&nbsp; buf=new&nbsp; StringBuffer(msg.length()+6);<br>
char&nbsp; ch='&nbsp; ';<br>
for(int&nbsp; i=0;i&lt;msg.length();i++)//若遇到换行就转为&lt;br><br>
{&nbsp; ch=msg.charAt(i);<br>
if(ch=='\n')buf.append("&lt;br>");<br>
else&nbsp; buf.append(ch);<br>
}<br>
out.println(buf.toString());<br>
}<br>
else<br>
out.println("现在还无法显示:"+message[j].getContentType());<br>
out.println("&lt;/tr>");<br>
out.println("&lt;table>");<br>
folder.close(true);<br>
store.close();<br>
%><br>
在Folder对象中可以用getMessageCount()和getUnreadMessageCount()方法来取得总共有多少封信和共有多少封信未读。

  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -