[Miles' Blog]

Welcome 2 My Planet

Available categories: [/] [development. ~]

Yup Mailman 1.3版总结 [Permalink]

Tue Sep 21 16:38:51 CST 2004
Category [working on Yup Mailman]

现在功能已经基本完成了,支持附件的管理。今天作了测试,发信也没有什么问题~~ 我给了一个版本号1.3,以后每次功能的完善会根据具体情况决定major version和minor version的更新。

到目前为止,值得注意的几个问题:

  1. 不要用\r\n作new line标记,而应该用\n。不知道为什么,用PrintWriter.println()(包裹一个Socket.getOutputStream())时候,会自动将其中的\n替换成\r\n。这样的结果,就是当用\r\n作换行标记时候,会产生\r\r\n,从而使得邮件内容错误。PrintWriter.println()的javadoc没有说明这个情况。
  2. 仍然不知道如何用jdom在读写xml文档时候完全保留white spaces。写的时候,一定不要设置newLine为true,否则会导致白空格丢失,但是,如果不设置newLine,整个xml文件看上去是一塌糊涂。。另外,对于entity,似乎也很难保留,其中的引导&还是会被替换成&导致内容完全无效。。不知道是这方面的api本身问题,还是我使用不当,不得其法 /images/emoticons/sad.gif
    最终我还是选择了用普通纯文本方式写,jdom读。这样就解决了所有问题。
  3. 当使用XYLayout时候,如果remove以后想重新设置一个现存的component的位置,除了parent.add时候设置正确的XYConstain以外,还需要对componentsetBounds(),否则位置会有问题。
  4. 多操作系统下的测试还没有进行,不过如何调用系统默认的浏览器仍然是个问题。查找默认路径对于windows比较适用,其他系统可能稍微有点勉强。

下一步的目标,是实现multipart/alternative,让正文有更好的适应性。当功能比较完善的时候,我考虑把它作为share ware发布 /images/emoticons/happy.gif

Posted by: miles
Comments [0] |

ContentType不可以反复设置? [Permalink]

Wed Sep 15 10:11:55 CST 2004
Category [working on Yup Mailman]

发现一个新问题,就是JTextPane的ContentType在被设置成text/html后,重新设置成text/plain就会报IllegalArgumentException: Must be StyledEditorKit
我估计可能是因为text/plain无法保证text/html所拥有的格式导致的。。总之api doc上面没有说明。

BTW,新的YupStudio logo和Mailman的icon:

   

Posted by: miles
Comments [0] |

Yup Mailman - 我们的自用群发软件 [Permalink]

Wed Sep 15 10:04:09 CST 2004
Category [working on Yup Mailman]

因为目前的网站推广需要,这两天抽空作了一个群发邮件的桌面程序。以前没真正做过swing UI,这也算是新的尝试了 /images/emoticons/wink.gif

程序的核心是利用socket与目标smtp server通信来发信。因为考虑到带宽的利用率,所以设计了多线程的方式。这里的任务分配其实很有学问,目前只是简单的根据mail address的数量和用户设置的thread count进行了数学上分配,其实考虑到建立socket的开销,更好的方式是根据主机MX纪录来分配,这样可以最大限度的利用现有socket资源,避免频繁的握手。。。有空一定要好好优化这部分! (y)

大多的工作还是在周边。一方面是UI,还有一方面是设置文件、成功失败列表文件、临时预览文件的管理,以及他们和UI的交互。大量的dirty works。。。还好有jb这样的优秀RAD工具,否则现在也没有写笔记的功夫了 /images/emoticons/silly.gif

总结一下其间遇到的几个难缠的问题:

  1. 要让滚动条总在最下端,有3个方法:
    • 调用JScrollPane.getViewport().scrollRectToVisible(),使得最下面的某一点可见;
    • 设置vertical scroll bar的value到max;
    • 在scroll pane里面setCaretPosition()(也就是编辑光标的位置)到length()。
    看上去第一和第二个方案比较cool一点,可实际上用于多线程环境都会造成死锁。而我这里恰好有一个需要多线程更新scroll pane的地方:失败和成功邮件状态察看(参看下面的截图)。这里为了保证逐行的显示mail address,不至于串行,所以在scroll pane内的那个text pane上用到了synchronized() {}
    没有细看类库的source,我推测可能是因为这些操作都不是原子的,而其中某些步骤和我这里的synchronized相互竞争了锁导致的问题。这里还有待进一步的研究(如果有时间/images/emoticons/silly.gif)。

  2. 发信时候,有些smtp server会反向查询from地址的主机部分,检查和你的本机ip是否相同。我现在用的是blah@本机ip地址,不过似乎有时候还是会失败。这个需要深入测试
  3. 我的几个dialog,比如preference,还有preview,都是在show的时候让默认的cancel/close button去requestFocus(),不过完全没有作用 /images/emoticons/sad.gif
其他的问题大多没什么难解决的,细心就没问题了。目前的版本还很粗糙,我的目标是把它最终做成一个功能完善的共享软件。有时间就有可能,呵呵。。 下面是一些界面截图以供参考 /images/emoticons/happy.gif



主界面




参数设置界面




邮件预览菜单:可以用内部的浏览器,或者IE进行预览。




预览界面




开始发送




失败和成功邮件状态察看




发送完成报告

Posted by: miles
Comments [0] |

?
十二月 2018
Sun? Mon? Tue? Wed? Thu? Fri? Sat?
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<  Nov???Today??? Jan  >
<< <   1   > >>

Available categories: [/] [development. ~]

Powered By blojsom?? RSS Feed? RSS2 Feed? RDF Feed

html hits:?39871