内容为HTML网页的邮件叫做HTML型邮件,它与文本型邮件的主要区别在于MIME类型的不同,一个为“text/html”,一个为“text/plain”。本文将使用javaMail发送HTML型邮件。用户通过在邮件书写页面attachMail.jsp填写表单然后提交给sendMail.jsp,,由sendMail.jsp调用实体bean实现邮件的发送。。

 

attachMail.jsp:
 
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path =request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="content-type"content="text/html;charset=gb2312">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="Thisis my page">
<!--
    <link rel="stylesheet" type="text/css"href="styles.css">
    -->
</head>
  
<body>
<h2>发送带附件HTML型邮件</h2><hr>
<form name="form1"method="post" action="sendMail.jsp">
<input type="text" id="SMTPHost"name="SMTPHost" /><br>
<input type="text" id="user"  name="user"/><br>
<input type="text" id="password" name="password"/><br>
<hr>
<input type="text" id="from"name="from" /><br>
<input type="text" id="to"name="to" /><br>
<input type="text" id="subject" name="subject"/><br>
<textarea id="content"name="content" rows="5"  cols="40"></textarea><br>
<br>
<input type="file" id="filename" name="filename"/><br><br>
    
<input type="submit"name="submit" value="发送">
<input type="reset"name="reset" value="重置">
    
</form>
</body>
</html>
 
SendAttachMail.java
 
package test;
 
importjava.util.Date;
importjava.util.Properties;
 
importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.Multipart;
import javax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
 
public classSendAttachMail {
       String SMTPHost =""; //SMTP服务器
       String user = "";     //登录SMTP服务器的账号
       String password ="";//登录SMTP服务器的密码
       String from ="";    //发件人邮箱
       String to ="";         //收件人游戏
       String subject ="";  //邮件标题
       String content =""; //邮件内容
       String filename ="";//附件文件名
       public SendAttachMail(){
              
       }
       public String getSMTPHost() {
              return SMTPHost;
       }
       public void setSMTPHost(String host) {
              SMTPHost = host;
       }
       public String getUser() {
              return user;
       }
       public void setUser(String user) {
              this.user = user;
       }
       public String getPassword() {
              return password;
       }
       public void setPassword(String password){
              this.password = password;
       }
       public String getFrom() {
              return from;
       }
       public void setFrom(String from) {
              this.from = from;
       }
       public String getTo() {
              return to;
       }
       public void setTo(String to) {
              this.to = to;
       }
       public String getSubject() {
              return subject;
       }
       public void setSubject(String subject) {
              this.subject = subject;
       }
       public String getContent() {
              return content;
       }
       public void setContent(String content) {
              this.content = content;
       }
       public String getFilename() {
              return filename;
       }
       public void setFilename(String filename){
              this.filename = filename;
       }
       //发送邮件
       public boolean send(){
              //创建一个属性对象
              Properties props = newProperties();
              //指定SMTP服务器
              props.put("mail.smtp.host",SMTPHost);
              //指定是否需要SMTP验证
              props.put("mail.smtp.auth","true");
              try{
                     //创建一个授权验证对象
                     SmtpAuth auth = newSmtpAuth();
                     auth.setAccount(user,password);
                     //创建一个session对象
                     Session mailSession =Session.getDefaultInstance(props,auth);
                     mailSession.setDebug(true);
                     //创建一个MimeMessage对象
                     MimeMessage message = newMimeMessage(mailSession);
                     //指定发件人游戏
                     message.setFrom(newInternetAddress(from));
                     //指定收件人邮箱
                     message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
                     //指定邮件主题
                     message.setSubject(new String(subject.getBytes("ISO8859-1"),  "gb2312"));
                     //指定邮件发送日期
                     message.setSentDate(newDate());
                     //指定邮件优先级 1:紧急,3:普通,5:缓慢
                     message.setHeader("X-Priority","1");
                     message.saveChanges();
                     //新建一个MimeMultipart对象用来存放多个BodyPart对象
                     Multipart container = newMimeMultipart();
                     //新建一个存放信件内容的BodyPart对象
                     BodyPart textBodyPart = newMimeBodyPart();
                     //给BodyPart对象设置内容和格式、编码格式
                     textBodyPart.setContent(new String(content.getBytes("ISO8859-1"), "gb2312"),"text/html;charset=gb2312");
                     //将含有信件内容的BodyPart加入到MimeMultipart对象中
                     container.addBodyPart(textBodyPart);
                     //新建一个存放信件附件的BodyPart对象
                     BodyPart fileBodyPart = newMimeBodyPart();
                     //处理邮件中附件文件名的中文问题
                     filename = new String(filename.getBytes("ISO8859-1"),  "gb2312");
                     
                     String filepath ="C:\\Users\\Administrator\\Desktop\\"+filename;
                     //将本地文件作为附件
                     FileDataSource fds = newFileDataSource(filepath);
                     fileBodyPart.setDataHandler(newDataHandler(fds));
                     //处理邮件中附件文件名的中文问题
                     String attachName =fds.getName();
                     attachName = newString(attachName.getBytes("gb2312"),"ISO8859-1");
                     //设定附件文件名
                     fileBodyPart.setFileName(attachName);
                     //将附件的BodyPart对象加入到container中
                     container.addBodyPart(fileBodyPart);
                     //将container作为消息对象的内容
                     message.setContent(container);
                     //创建一个Transport对象
                     Transport transport =mailSession.getTransport("smtp");
                     System.out.println(SMTPHost);
                     System.out.println(user);
                     System.out.println(password);
                     //连接SMTP服务器
                     transport.connect(SMTPHost,user,password);
                     //发送邮件
                     transport.send(message,message.getAllRecipients());
                     transport.close();
                     return true;
              }catch (Exception e) {
                     // TODO: handle exception
                     e.printStackTrace();
                     return false;
              }
       }
 
}
 
sendMail.jsp
 
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="test.SendAttachMail"%>
<jsp:useBean id="mySend" class="test.SendAttachMail"></jsp:useBean>
<jsp:setProperty property="*" name="mySend"/>
<%
    boolean status = mySend.send();
    if(status){
"恭喜你。发送邮件成功!");
    }else{
"对不起发送邮件失败");
    }
%>

 

附带截图:attachMail.jsp

 

 

附带截图:SendAttachMail.java

 

java邮件附件名称分段 java邮件附件解析_javaMail

附带截图:sendMail.jsp

 

java邮件附件名称分段 java邮件附件解析_SMTP_02

 

Sina邮箱:

 

java邮件附件名称分段 java邮件附件解析_javaMail_03

使用javaMail接收(文本支持HTML)邮件

 

receiveMail.jsp:
 
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path =request.getContextPath();
String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="content-type"content="text/html;charset=gb2312">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="Thisis my page">
<!--
    <link rel="stylesheet" type="text/css"href="styles.css">
    -->
</head>
  
<body>
<h2>收取邮件</h2><hr>
<form name="form1"method="post" action="MailList.jsp">
<input type="text" id="POP3Host"name="POP3Host" /><br>
<input type="text" id="user"  name="user"/><br>
<input type="text" id="password" name="password"/><br>
    
<input type="submit"name="submit" value="发送">
<input type="reset"name="reset" value="重置">
    
</form>
</body>
</html>
 
 
GetMail.java:
 
package test;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
 
import javax.mail.BodyPart;
import javax.mail.FetchProfile;
import javax.mail.Folder;
import javax.mail.Header;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
 
public class GetMail {
       StringPOP3Host = ""; // POP3Host服务器
       Stringuser = ""; // 登录SMTP服务器的账号
       Stringpassword = "";// 登录SMTP服务器的密码
       Sessionsession = null;
       Folderfolder = null;
       Storestore = null;
 
       publicGetMail() {
 
       }
 
       publicString getPOP3Host() {
              returnPOP3Host;
       }
 
       publicvoid setPOP3Host(String host) {
              POP3Host= host;
       }
 
       publicString getUser() {
              returnuser;
       }
 
       publicvoid setUser(String user) {
              this.user= user;
       }
 
       publicString getPassword() {
              returnpassword;
       }
 
       publicvoid setPassword(String password) {
              this.password= password;
       }
 
       publicSession getSession() {
              returnsession;
       }
 
       publicvoid setSession(Session session) {
              this.session= session;
       }
 
       publicFolder getFolder() {
              returnfolder;
       }
 
       publicvoid setFolder(Folder folder) {
              this.folder= folder;
       }
 
       publicStore getStore() {
              returnstore;
       }
 
       publicvoid setStore(Store store) {
              this.store= store;
       }
 
       //连接邮件服务器
       publicvoid connect() throws Exception {
              //创建一个授权验证对象
              POP3Authauth = new POP3Auth();
              auth.setAccount(user,password);
              Propertiesprop = new Properties();
              System.out.println(POP3Host);
              prop.put("mail.pop3.host",POP3Host);
              //取得一个session对象
              session= Session.getDefaultInstance(prop, auth);
              //取得一个Store对象
              store= session.getStore("pop3");
              System.out.println(user+"================"+password);
              store.connect(POP3Host,user, password);
              //取得一个Folder对象
              folder= store.getDefaultFolder().getFolder("INBOX");
              folder.open(Folder.READ_ONLY);
       }
 
       //获取所有邮件的列表
       publicMessage[] getAllMail() throws Exception {
              //建立POP3连接
              connect();
              //取得所有的Message对象
              Message[]msg = folder.getMessages();
              FetchProfileprofile = new FetchProfile();
              profile.add(FetchProfile.Item.ENVELOPE);
              folder.fetch(msg,profile);
              returnmsg;
       }
 
       //取得邮件列表的信息
       publicList getMailInfo(Message[] msg) throws Exception {
              Listresult = new ArrayList();
              Mapmap = null;
              Multipartmp = null;
              BodyPartpart = null;
              Stringdisp = null;
              SimpleDateFormatfmt = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss");
              Enumerationenmu = null;
              for(int i = 0; i < msg.length; i++) {
                     map= new HashMap();
                     //读取邮件ID
                     enmu= msg[i].getAllHeaders();
                     Headerh = null;
                     while(enmu.hasMoreElements()) {
                            h= (Header) enmu.nextElement();
                            if(h.getName().equals("Message-ID")) {
                                   map.put("ID",h.getValue());
                            }
                     }
                     //读取邮件标题
                     map.put("subject",msg[i].getSubject());
//                   new String(subject.getBytes("ISO8859-1"),  "gb2312");
                     Stringsender = new String(msg[i].getFrom()[0].toString().getBytes("ISO8859-1"), 
                                   "GBK");
                     Stringdate = "";
                     if(msg[i].getSentDate()!=null){
                            date= fmt.getInstance().format(msg[i].getSentDate());
                     }else{
                            date= "";
                     }
                     //读取发件人
                     map.put("sender",sender);
//                   map.put("sender", msg[i].getFrom()[0].toString());
              
                     //读取发送时间
                     map.put("senddate",date);
                     //读取邮件大小
                     map.put("size",new Integer(msg[i].getSize())+"K");
                     //读取附件
                     map.put("hasAttach","");
                     //判断是否有附件
                     if(msg[i].isMimeType("multipart/*")) {
                            mp= (Multipart) msg[i].getContent();
                            //遍历每个Miltipart对象
                            for(int j = 0; j < mp.getCount(); j++) {
                                   part= mp.getBodyPart(j);
                                   disp= part.getDescription();
                                   //如果有附件
                                   if(disp != null && (disp.equals(Part.ATTACHMENT)
                                                 ||disp.equals(Part.INLINE))) {
                                          System.out.println("++++++++++++++");
                                          map.put("hasAttach","X");
                                   }
                            }
                     }
                     result.add(map);
              }
              returnresult;
       }
 
       //查找指定的邮件
       publicMessage findMail(String id) throws Exception {
              Message[]msg = getAllMail();
              Enumerationenmu = null;
              Headerh = null;
              for(int i = 0; i < msg.length; i++) {
                     enmu= msg[i].getAllHeaders();
                     while(enmu.hasMoreElements()) {
                            h= (Header) enmu.nextElement();
                            if(h.getName().equals("Message-ID")
                                          &&(h.getValue().equals(id))) {
                                   returnmsg[i];
                            }
                     }
              }
              returnnull;
       }
 
       //读取邮件内容
       publicMap readMail(String basePath, String id) throws Exception {
              Mapmap = new HashMap();
              //找到目标邮件
              Messagemsg = findMail(id);
              Stringtitle = "";
              if(msg.getSubject()!=null){
                     title= msg.getSubject();
              }
              //读取邮件标题
              map.put("subject",title);
              System.out.println(msg.getFrom()[0].toString()+"====");
              //读取发件人
              map.put("sender",msg.getFrom()[0].toString());
              map.put("attach","");
              //取得邮件内容
              if(msg.isMimeType("text/*")) {
                     map.put("content",msg.getContent().toString());
              }else {
                     StringBufferresult = new StringBuffer();
                     Multipartmp = (Multipart) msg.getContent();
                     BodyPartpart = null;
                     Stringdisp = null;
                     //遍历每个Multipart对象
                     for(int j = 0; j < mp.getCount(); j++) {
                            part= mp.getBodyPart(j);
                            disp =part.getDisposition();
                            //如果有附件
                            if(disp != null
                                          &&(disp.equals(Part.ATTACHMENT) || disp
                                                        .equals(Part.INLINE))){
                                   Stringfilename = part.getFileName();
                                   filename= new String(filename.getBytes("ISO8859-1"),
                                                 "gb2312");
                                   map.put("attach",filename);
                                   //下载附件
                                   InputStreamin = part.getInputStream();
                                   filename= basePath + "/" + filename;
                                   FileOutputStreamout = new FileOutputStream(new File(
                                                 filename));
                                   byte[]content = new byte[255];
                                   intread = 0;
                                   while((read = in.read(content)) != -1) {
                                          out.write(content);
                                   }
                                   out.close();
                                   in.close();
                            }else{
                                   result.append(part.getContent().toString());
                            }
                     }
                     map.put("content",result.toString());
              }
              returnmap;
       }
}
 
MailList.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="test.GetMail"%>
<jsp:useBean id="receiver" class="test.GetMail" scope="session"></jsp:useBean>
<jsp:setProperty property="*" name="receiver"/>
<html>
<head><title>我的收件箱</title></head>
<body>
<h2>我的收件箱</h2><hr>
<table border=1  width=700>
<tr height=30  bgcolor=#dddddd>
<td align = center> 邮件标题</td>
<td width=150  align = center> 发件人</td>
<td width=180  align = center> 发件时间</td>
<td width=80  align = center> 邮件大下</td>
<td width=50  align = center> 附件</td>
           
</tr>
<%
//取得邮件列表显示
              Iterator it =receiver.getMailInfo(receiver.getAllMail()).iterator();
              Map map = null;
//将邮件信息列表显示
              while(it.hasNext()){
                  map = (Map)it.next();
"<tr height=30 valign = middle align=center>");
"<td><a href='readMail.jsp?id="+map.get("ID")+
"'target= '_blank'>"+map.get("subject")+"</a></td>");
"<td>"+map.get("sender")+"</td>");
"<td>"+map.get("senddate")+"</td>");
"<td>"+map.get("size")+"</td>");
"<td>"+map.get("hasAttach")+"</td>");
"</tr>");
              }
%>
</table>
</body>
    
</html>
 
 
readMail.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="test.GetMail"%>
<%
//从session中取出receiver
"receiver");
 
%>
<html>
<head><title>阅读邮件</title></head>
<body>
<h2>阅读邮件</h2><hr>
       
<table border=1  width =700  cellpadding=4>
       
<%
//取得请求参数
"id");
"C:\\Users\\Administrator\\Desktop\\";
//取得指定的邮件内容
              Map result = receiver.readMail(basePath,id);
%>
           
<tr>
<td width=100  align=right  bgcolor=#dddddd>邮件标题</td>
<td><%=result.get("subject")%></td>
</tr>
           
<tr>
<td width=100  align=right  bgcolor=#dddddd>发件人</td>
<td><%=result.get("sender")%></td>
</tr>
           
<%
"attach").toString();
//有附件才显示下面一行
           if(attach.trim().length()>0){
%>
<tr>
<td width=100  align=right  bgcolor=#dddddd>附件</td>
<td><a href="<%=result.get("attach")%>"><%=result.get("attach")%></a></td>
</tr>
<%}  %>
           
<tr>
<td width=100  align=right  bgcolor=#dddddd>内容</td>
<td><%=result.get("content")%></td>
</tr>
</table>
       
</body>
    
</html>

 

 

演示效果:

ReceiveMail.jsp

java邮件附件名称分段 java邮件附件解析_javaMail_04

 

MailList.jsp

 

java邮件附件名称分段 java邮件附件解析_SMTP_05

 

readMail.jsp

 

java邮件附件名称分段 java邮件附件解析_java邮件附件名称分段_06


 

备注:附件是写的本地路径,只为演示而已。。请保存在自己的服务器中

 

遇到的问题:

POP3 未开启 

 

请开启 自己测试邮箱


java邮件附件名称分段 java邮件附件解析_java邮件附件名称分段_07