1、J office 整合外部邮件详细设计 一. 需求分析 实现的功能类似Outlook,但不需要这么强大,仅需要能接收外部的邮件,并且能正常显示出来,并且供用户进行全文检索,用来支持外部邮件收发功能。 二. 设计要点 将节点放在通讯管理下,取名外部邮件,并树的形式加入两叶子结点 外部邮件- +新建外部邮件 +个人外部邮箱 +外部邮箱设置 当点击“新建外部邮件”时跳转到外部邮件发件页面,实现利用外部邮件服务器进行邮件发送。 当点击“个人外部邮箱”时查询数据库,将也同步过来的邮件显示出来。 显示的数据的列表工具栏上做如下按妞“收取外部邮件
2、等以实现外部邮件同步收取与查询。 三. 表设计 Out_mail_user_seting外部邮件的用户设置表 id 自增ID pk userId Oa系统用户ID Fk ref_to_ AppUser userName Oa系统用户名 mailAddress 外部邮件地址 mailPass 密码 smtpHost Smtp主机 smtpPort Smtp端口 smtpAuth 不详 true popHost Pop主机 popPort Pop端口 Out_mail 接收外部邮件表 mailId 自增列 p
3、k userid Oa系统用ID Fk_ref_to_Out_mail_user_seting title 主题 content 内容 Html形式 senderAddresses 发件人地址 senderName 发件人名称 receiverAddresses 收件人地址 多人以豆号分隔 receiverNames 收件人名称 多人以豆号分隔 cCAddresses 抄送人地址 多人以豆号分隔 cCNames 抄送人名称 多人以豆号分隔 bCCAddresses 暗送人地址 多人以豆号分隔 bCCNames 暗送人名称
4、多人以豆号分隔 mailDate 日期 多人以豆号分隔 fileIds 附件 多附件以豆号分隔 fileNames 附件 mailFlag 收发标志 S:为发(send),R为收(Receive) Out_mail_file mailId 邮件id Fk_ref_to_Out_mai fileid 文件id Fk_ref_to_file_attach 四. 实现要点 1. 根据表Out_mail_user_seting, Out_mail利用代码生成器创建DAO对像的接口与实现,并将其放于src\com\htsoft\oa\dao\commu
5、nicate文件夹下。 2. 根据表Out_mail_user_seting, Out_mail利用代码生成器创建MODEL对像的接口与实现,并将其放于src\com\htsoft\oa\model\communicate文件夹下。 3. 根据表Out_mail_user_seting, Out_mail利用代码生成器创建SERVICE对像的接口与实现, 并将其放于src\com\htsoft\oa\service\communicate文件夹下。 4. 根据表Out_mail_user_seting, Out_mail利用代码生成器创建ACTION对像的接口与实现, 并将其放于src\
6、com\htsoft\oa\action\communicate文件夹下。 修改DAO层代码,向外部邮件服务器收件与发件的方法,并将附件放在jofficev131\web\userfiles\outmailfiles\文件夹下,并为每一用户建一个文件夹,供SERVICE调用,调方法主要运用javamail实现,主要代码如下, //发邮件 public void send(String user, String pass, String to, String subject, String html,String affix) throws Exception
7、 { Security.addProvider(new .ssl.internal.ssl.Provider()); final String SSL_FACTORY = ".ssl.SSLSocketFactory"; // Get a Properties object Properties props = System.getProperties(); props.setProperty("mail.smtp.host", smtpHost); props.setProperty(
8、"mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.socketFactory.port", smtpPort); props.put("mail.smtp.auth", smtpAuth);
9、 final String username = user; final String password = pass; Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new Password
10、Authentication(username, password); } }); // -- Create a new message -- Message msg = new MimeMessage(session); // -- Set the FROM and TO fields -- msg.setFrom(new InternetAddress(username)); msg.setRecipients(Message
11、RecipientType.TO, InternetAddress.parse(to, false)); msg.setSubject(subject); mp=new MimeMultipart(); BodyPart bp = new MimeBodyPart(); bp.setContent("" + html, "text/html;charset=
12、UTF-8"); mp.addBodyPart(bp); BodyPart bp1 = new MimeBodyPart(); //附件 FileDataSource fileds = new FileDataSource(affix); bp1.setDataHandler(new DataHandler(fileds)); bp1.setFileName(fileds.getName()); mp.addBodyPart(bp1);
13、 msg.setSentDate(new Date()); msg.setContent(mp); Transport.send(msg); System.out.println("Message sent."); } //收邮件 public void fetch(String username, String password) throws Exception { Security.addProvider(new .ssl.internal.ssl.Provider());
14、 final String SSL_FACTORY = ".ssl.SSLSocketFactory"; // Get a Properties object Properties props = System.getProperties(); props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); props.setProperty("mail.pop3.socketFactory.fallback", "false");
15、 props.setProperty("mail.pop3.port", popPort); props.setProperty("mail.pop3.socketFactory.port", popPort); // 以下步骤跟一般的JavaMail操作相同 Session session = Session.getDefaultInstance(props, null); // 请将红色部分对应替换成你的邮箱帐号和密码 URLName urln = new URLName("pop3", popHos
16、t, Integer.parseInt(popPort), null, username, password); Store store = session.getStore(urln); Folder inbox = null; try { store.connect(); inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); F
17、etchProfile profile = new FetchProfile(); profile.add(FetchProfile.Item.ENVELOPE); Message[] messages = inbox.getMessages(); inbox.fetch(messages, profile); System.out.println("收件箱的邮件数:" + messages.length); for (int i = 0; i < messages
18、length; i++) { // 邮件发送者 String from = decodeText(messages[i].getFrom()[0].toString()); InternetAddress ia = new InternetAddress(from); System.out.println("FROM:" + ia.getPersonal() + '(' + ia.getAddress() +
19、 ')'); // 邮件标题 System.out.println("TITLE:" + messages[i].getSubject()); // 邮件大小 System.out.println("SIZE:" + messages[i].getSize()); // 邮件发送时间 System.out.println("DATE:" + messages[i].getSentDate())
20、 /*** 在此处将邮件内容存入数据库 Out_mial.settitle(messages[i].gettitle()); Out_mailservice.save(Out_mial); ***/ } } finally { try { inbox.close(false); } catch (Exception e) { } try { store.close(); } catch (Exception e) { } } }






