基于JavaMail的邮件客户端--JustLook(三、发送多媒体邮件)

上篇邮件解析阐述的是关于如何接收邮件,这篇则是介绍发送邮件的问题,当然这里所讨论的不是简单的纯文本邮件。

要发送多媒体邮件,一方面要处理邮件正文样式,如:字体,颜色,内嵌图片等;另一方则是附件等问题。

富文本编辑器

富文本编辑器,Rich Text Editor, 简称 RTE, 它提供类似于 Microsoft Word 的编辑功能,容易被不会编写 HTML 的用户并需要设置各种文本格式的用户所喜爱。目前富文本编辑器大多都是Web版,如:FckEditor等,客户端版本的富文本编辑器则较少,在很多OA系统中其实也有这方面的需要,对于这个问题有以下两种方法来解决:

1.自己编写一套富文本编辑器,目前做Java GUI几乎都是用JavaSwing来做,用javax.swing.text.html .HTMLEditorKit就可以完成。

以下是JDK API 1.6.0中文版中对它的介绍,只摘抄部分内容详细内容参阅原文。

Swing JEditorPane 文本组件通过称为 EditorKit 的插件机制来支持不同种类的内容。此类提供了 HTML version 3.2(带有某些扩展)的默认支持,并正在向 version 4.0 迁移。提供 HTML EditorKit 有几个目的,这些目的影响了 HTML 的建模方式。并从基本方法上影响了其设计。

a.支持编辑

b.可扩展的/可伸缩的

c.异步加载

d.无丢失

2.利用SWT中的HtmlComposer组件,调用fckeditor等基于javascript的web rich editor组件。

没有去仔细论证第二种方案对系统性能的影响,但个人认为,既然纯粹使用JavaSwing能够完成,就还是不去牵扯Web和SWT的东西了,因此采用第一种方案来完成。

本人不才,在这里走了很多弯路,起初甚至不知道富文本编辑器是什么东西,搜索不到参考后,自己写了一套,没用HTMLEditorKit,就是根据按钮事件,出来的效果很差,JavaSwing中字体大小、背影颜色等保存为Html后与JavaSwing不一致。后来偶然的机会总算在开源无解上找到了高人们提供的源码,然后才知道了HTMLEditorKit,其中两个开源项目的功能与我的需求一直,请看截图:

HTMLEdit:

Ekit

 

很显然Ekit的功能更全以后做OA直接可以拿来用,HTMLEdit的功能对我已经足够,而且鉴于界面大小,故选择第一个,对界面稍作修改,然处理完代码,我的邮件客户端中的富文本编辑器如下:

感觉是不是好多了呢?嘿嘿。点击图片按钮后会:

目前只支持Load image from URL,添加的图片作为内嵌对象存在于邮件中,图片为网络图片比较容易实现,如果是本地图片则这封邮件的格式就发生了变化,本地图片需要作为附件随信发送,对图片地址也需要相应的处理。添加本地图片这部分尚未完成。

获取邮件正文很简单,内容部分其实是一个JTextPane,只需要一个Get就行了。

添加附件

 

 

发送邮件窗体为用户提供了添加附件的功能,目前只支持单个附件的添加,支持邮件群发功能,多个邮件以分号分隔。忘记了在界面中注释了,类似的小问题还有很多。我个人是这样认为的,多个文件只要你打个包再添加就可以了,而且我一个人一个月的时间不可能把软件的细节做得尽善尽美,在理论技术上完成,细节部分考虑到,类似的问题解决,扩展性的细节问题就不去实际做了,毕竟一个人力量有限,或许也可以成为懒惰的借口吧O(∩_∩)O~。

以下是发送邮件方法的代码:

 

 @SuppressWarnings("static-access")
 public boolean SendMail(String subject, String body, String to,
   String filename) {
  try {

   Message msg = new MimeMessage(edu.cie.FrameMain.getSession()); //创建MIME邮件对象
   msg.setDataHandler(new DataHandler(body,
     "text/html;   charset=gb2312"));//设置邮件内容    

   if (filename.equals("") || filename == null
     || filename.equals("null")) {
    msg.setFrom(new InternetAddress("xxxxx@163.com")); //设置发信人
    msg.setRecipients(Message.RecipientType.TO, InternetAddress
      .parse(to, false));//设置收信人
    msg.setSubject(subject);//设置邮件主题    
   } else {
    msg.setFrom(new InternetAddress("xxxxx@163.com")); //设置发信人  
    msg.addRecipient(javax.mail.Message.RecipientType.TO,
      new InternetAddress(to));//添加收信人
    msg.setSubject(subject); //设置邮件主题
    BodyPart mbp1 = new MimeBodyPart(); //正文
    mbp1.setContent(body, "text/html;charset=gb2312"); // 发一个HTML格式的
    sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
    MimeBodyPart mbp2 = new MimeBodyPart(); //附件
    FileDataSource fds = new FileDataSource(filename);
    mbp2.setDataHandler(new DataHandler(fds));
    mbp2.setFileName(" =?GBK?B? "
      + enc.encode(fds.getName().getBytes()) + "?= ");
    Multipart mp = new MimeMultipart(); //整个邮件(正文+附件)
    mp.addBodyPart(mbp1);
    mp.addBodyPart(mbp2);
    msg.setContent(mp); // 添加 Multipart到Message中
   }
   msg.setSentDate(new Date()); //发送日期
   Transport.send(msg); //发送邮件
   return true; //发送成功
  } catch (Exception e) {
   return false; //发送失败
  }
 }

 

稍后带来,邮件本地存储与安全性问题。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值