四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
进入登录页面点击“新用户注册”按钮是进入注册页面否输入用户名、密码信息无效输入用户名、密码、随机校验码等注册信息无效验证信息是否有效有效建立帐号验证信息是否有效有效进入邮箱查看首页面建立邮箱
图4-1 用户登录与注册流程图
4.3.2邮件发送的实现
在发送邮件时,用户填写接收邮件方的Email地址,如果是给内网的用户发送电子邮件,那么可直接从事先定义的单位地址簿中选择同事的名字发送。
本模块就是利用了JavaMail的SMTP传输来实现其功能。邮件的发送通常包括获取会话、创建信息、填充消息、设置附件、发送消息等操作。对于广大的中小企业来讲垃圾邮件是一大祸害。为了有效防止垃圾邮件,进行SMTP身份认证是一种保证SMTP服务器安全的方法,将James配置为需要身份认证的SMTP服务器。综上所述,用JavaMail API进行发送邮件时,身份验证的设置,即设置SMTP协议的Authenticator是必不可少的。
28
四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现
登录系统生成会话(session)对象根据session对象生成传输消息(SendMessage)对象设置发件人/收件人/主题/发信时间/信件生成附件类对象设置附件文本内容根据Session生成传输(Transport)对象连接到SMTP服务器,发送邮件 图4-2 发送邮件流程图
Action处理代码: //发送新邮件
User user=getLoginOperator(); if(ids!=null&&!\ //有附后件
String []idArr=ids.split(\
Attachment attach=new Attachment(); List idList=new ArrayList(idArr.length); for(int i=0,iLen=idArr.length;i } attach.setIds(idList); attach.setUserid(this.getLoginOperator().getId()); List list=attachmentManager.getDao().getList(attach, 5); try { 29 四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现 MailUtils.sendEmailWithAttachment(user.getUsername(),user.getCredentials(), to, } return SUCCESS; } try { MailUtils.sendEmail(user.getUsername(),user.getCredentials(), to, null, cc, writeInputStream(\key:'success',msg:'邮件发送至\成return SUCCESS; writeInputStream(\key:'success',msg:'邮件发送至\失return SUCCESS; null, cc, subject, body, \功', type:'type'}\\n\ } catch (Exception e) { 败,错误信息:\ }else{ subject, body, \ } catch (Exception e) { } writeInputStream(\key:'success',msg:'邮件发送至\ writeInputStream(\key:'success',msg:'邮件发送至\失return SUCCESS; 败,错误信息:\ type:'type'}\\n\ 后台处理: 负责发送邮件的类为传输消息类SendMessage,现假设LMsendMsg是类SendMessage的一个实例,那么发送邮件的主要流程如下: (1)设置邮件发送方。 LMsendMsg->setSender(new Address(mailsender)); (2)设置邮件接收方。 LMsendMsg->setReceiver(Address.parse(mailreceiver)); (3)设置邮件抄送方。 LMsendMsg->setCC(Address.parse(mailCCer)); 30 四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现 (4)新建一个邮件内容类MsgContent的实例msgc1,并设置标题和内容,以GBK的方式编码。 MsgContent msgc1=new MsgContent(); msgc1->writeMsg(subject, content, “GBK”); (5)新建一个邮件附件类MsgAttach的实例msga1,并设置附件。 MsgAttach msga1=new MsgAttach(this.attachFile); (6)将邮件内容和附件放入传输消息类 LMsendMsg->setContent(msgc1, msga1); (7)设置邮件发送时间。 LMsendMsg->setSentTime(new Date()); (8)生成传输(Transport)对象。 transport=session.getTransport(“smtp”); (9)连接到SMTP服务器,并验证身份 transport.connect(“smtp.”+host,user,password); (10)发送邮件 transport.sendMessage(LMsendMsg, LMsendMsg.getAllRecipients()); (11)关闭Transport连接 transport.close(); 4.3.3. 邮件接收的实现 这一模块的功能除了接收邮件以外还有对邮件内容的解析,比如发件人、主题、日期、大小、正文和附件等详细信息,这些功能的实现是利用JavaMail API完成的。 Action处理: //取邮件目录 String retStr=null; if(folderId!=null&&!\ } retStr=getEmails(getLoginOperator().getUsername(),folderId); retStr=getEmails(getLoginOperator().getUsername()); //MailHelper.getJsonMail(true,getLoginOperator().getUsername(),getLoginOp 31 }else{ 四川大学工程硕士学位论文 中小企业web邮件系统的设计与实现 erator().getCredentials()); writeInputStream(retStr); return SUCCESS; 后台处理主要流程如下: (1)创建Properties对象 Properties props=new Properties(); (2)创建Session对象,通过调用getInstance对Session实例化 Session session=Session.getInstance(props,null); (3)使用Session的getstore()方法来获得邮件服务器的POP3存储 Store store = session.getStore(\指定pop3协议 (4)连接邮件服务器中的用户邮箱 String host=(String)session.getAttribute(“host”); String user=(String)session.getAttribute(“user”); String password=(String)session.getAttribute(“password”); store.connect(host,user,password); (5)打开收件箱 Folder folder = store.getFolder(\ folder.doOpenFolder(READ_ONLY); //只读方式打开 (6)调用getMessage方法收取邮件 Message message[] = folder.getMessage() 当经过上述流程后,还需解析邮件。一个邮件消息一般由消息头和消息体组成。消息头就是除了邮件内容以外关于邮件的相关信息。消息体为邮件的内容,如果消息体不含附件,那么就为普通文本形式,否则为Multipart类型。 JavaMail API的MessageParse类实现了上述的邮件解析功能,接下来给出MessageParse的部分方法: getFrom() getCc() getDate() getSubject() getPriority() //获取from域 //获取cc域 //获取主题 //获取日期 //获取邮件优先级 setContentType() //设置附件类型 32