📄 detailmail.jsp
字号:
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="javax.mail.*,javax.mail.internet.ContentType
,java.util.*,java.io.*,email.*,javax.mail.internet.MimeUtility"%>
<html>
<head>
<title>显示e-mail的详细信息</title>
</head>
<body bgcolor="#CFF1E1">
<%
//得到当前e-mail所在的邮箱类型(收件箱或是回收站)
String bin=request.getParameter("bin");
String mybin="";
//if(bin.equals("receive")) mybin="收件箱";
//else mybin="回收站";
mybin="收件箱";
%>
<br><h3>
我的<%=mybin%>>>
</h3>
<%
UserConfig userConfig = (UserConfig)session.getAttribute("userConfig") ;
//得到要察看的e-mail的编号msg,即要看第几封e-mail
String msg=request.getParameter("msg");
//得到邮件服务器要验证的参数
//String host=(String)session.getAttribute("host");
String host = userConfig.getPop_host();
//String user=(String)session.getAttribute("user");
String user = userConfig.getUser_count();
//String password=(String)session.getAttribute("password");
String password = userConfig.getUser_pwd() ;
try{
//获得一个session对象,并设置其属性为true
Properties props=new Properties();
Session recesession=Session.getInstance(props,null);
//recesession.setDebug(true);
//创建一个Store对象,并根据得到的三个参数连接到邮件服务器中的用户邮箱
Store store=recesession.getStore("pop3");
//store.connect("pop."+host,user,password);
store.connect(host,user,password);
//打开收件箱
Folder inbox=store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
//根据msg参数得到该e-mail
int imsg=Integer.parseInt(msg);
Message message=inbox.getMessage(imsg);
Address[] address;
%>
<table width=85% align="center">
<tr>
<td>发件人:</td>
<td>
<%
//得到发件人的地址
address=message.getFrom();
if(address!=null){
for(int i=0;i<address.length;i++){
out.print(new String(address[i].toString().getBytes("ISO-8859-1"),"GBK")+" ");
} }else
out.println("无");
%>
</td>
</tr>
<tr>
<td>发送时间:</td>
<td>
<%
//得到e-mail发出的时间
Date sentdate=message.getSentDate();
if(address!=null)
out.print(sentdate.toString());
else
out.println("无");
%>
</td>
</tr>
<tr>
<td>收件人:</td>
<td>
<%
//得到收件人的地址列表
address=message.getRecipients(Message.RecipientType.TO);
if(address!=null)
for(int i=0;i<address.length;i++)
out.print(address[i]+"  ");
else
out.println("无");
%>
</td>
</tr>
<tr>
<td>抄送:</td>
<td>
<%
//得到抄送人的地址
address=message.getRecipients(Message.RecipientType.CC);
if(address!=null)
for(int i=0;i<address.length;i++) {
out.print(address[i]+"  ");
}
else
out.println("无");
%>
</td>
</tr>
<tr>
<td>标题:</td>
<%String title = message.getSubject().substring(0,1);
title = new String(title.getBytes(),"GBK");
%>
<td><%=title.equalsIgnoreCase("?")?new String(message.getSubject().getBytes("ISO-8859-1"),"GBK"):MimeUtility.decodeText(message.getSubject())%></td>
</tr>
<tr>
<td colspan=2>
<br>
<%
//body是一个用来标记是否点击了附件下载链接的参数,如果没有body参数,则只显示有几个附件以及它们的下载链接
if(request.getParameter("body")==null)
{
//如果是一个多部分内容的e-mail
if(message.isMimeType("multipart/*"))
{
//获得代表该e-mail的多部分内容的Multipart对象
Multipart multipart = (Multipart)message.getContent();
//依次获取Multipart对象的每个部分
for(int i = 0;i < multipart.getCount();i++)
{
//得到每个部分的属性
Part p = multipart.getBodyPart(i);
String disposition = p.getDisposition();
//如果该部分中是附件内容,则输出该附件的下载链接
if ((disposition != null) &&(disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE)))
{
String filename=p.getFileName();
// filename = new String(filename.getBytes("ISO8859_1"),"GB2312");
// System.out.println("附件名:"+filename);
filename=javax.mail.internet.MimeUtility.decodeText(filename);
//System.out.println("附件名2:"+filename);
%>
<!--传递要看第几封e-mail的第几个附件-->
<p>
附件:
<a href="detailMail.jsp?msg=<%=message.getMessageNumber()%>&body=<%=i%>">
<%=filename%>
</a>
</p>
<%
}
else if(disposition==null)
{
//如果该部分是普通文本内容(无附件),则输出其文本内容
if(p.isMimeType("text/plain")){
out.print(p.getContent());
}else {
//如果该部分是特殊附件,就不做处理
out.print(new String(getPart(p,0,3,1).getBytes("ISO-8859-1"),"GBK"));
}
}
}
}
//如果是普通文本形式的e-mail,则显示其详细内容
else if(message.isMimeType("text/plain"))
{
out.print(message.getContent());
}
}
//如果有body参数,即表明用户点击了附件下载的链接,这时就可以下载相应的附件了
else
{
//得到要下载的附件的编号
int attachNo=Integer.parseInt(request.getParameter("body"));
Part p;
//如果编号小于0,则表明是一个单部分的email
if(attachNo<0) p=message;
//否则是一个多部分组成的email,得到附件的对应部分
else{
Multipart multipart=(Multipart)message.getContent();
p=multipart.getBodyPart(attachNo);
System.out.println("Part was exit:"+p);
}
//设置附件的类型属性
response.setContentType(p.getContentType());
//生成下载附件的头信息
String s=p.getFileName();
s=javax.mail.internet.MimeUtility.decodeText(s);
if (p.getFileName()!=null){
response.setHeader("Content-Disposition","attachment; filename=\""+s+"\"");
}
//设置下载过程中的输入流和输出流
OutputStream fout=response.getOutputStream();
InputStream fin=p.getInputStream();
//下载附件
int c=fin.read();
while(c!=-1)
{
fout.write(c);
c=fin.read();
}
fin.close();
fout.flush();
fout.close();
}
%>
</td>
</tr>
</table>
<%
//关闭收件箱和到邮件服务器的连接
inbox.close(true);
store.close();
}catch(MessagingException m)
{
out.println(m.toString());
}
%>
<p>
<a href="myinbox.jsp">返回我的<%=mybin%></a></p>
<%!
public String getPart(Part part, int partNum, int msgNum,int x) throws
MessagingException,IOException
{
String s="";
String s1=""; // x参数来确定是以html格式显示还是以plain
String s2="";
String s3="";
String s5="";
String sct = part.getContentType();
if (sct == null)
{
s="part 无效";
return s;
}
ContentType ct = new ContentType(sct);
if (ct.match("text/html")||ct.match("text/plain"))
{
// display text/plain inline
s1="<pre>"+(String)part.getContent()+"</pre>";
}
else if(partNum!=0)
{
String temp="";
if ((temp = part.getFileName()) != null)
{
s2= "<b>Filename:</b> " + temp + "<br>";
}
/*
out.println("<a href=\"" +
HttpUtils.getRequestURL(req) +
"?message=" +
msgNum + "&part=" +
partNum + "\">Display Attachment</a>");
*/
}
if(part.isMimeType("multipart/alternative"))
{
String s6="";
String s7="";
Multipart mp = (Multipart)part.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++)
{
if(mp.getBodyPart(i).isMimeType("text/plain"))
s7=getPart(mp.getBodyPart(i), i, 3,2);
if(mp.getBodyPart(i).isMimeType("text/html"))
s6=getPart(mp.getBodyPart(i), i, 3,1);
}
if(x==1){s5=s6;}
if(x==2){s5=s7;}
return s5;
}
s=s1+s2;
return s;
}
%>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -