最近遇到的利用Jmail发送邮件的一些问题

JMail是一个使用非常广泛的收发邮件的组件,发送邮件速度快。支持群发,发送附件。
可以在http://www.dimac.net中免费下载w3Jmail 4.X

发送邮件功能在我们系统中一直就有,可是最近出了二个大问题。一是发送的邮件标题乱码,二是当smtp服务器需要认证时没有提供与发件人email相同的认证账号和密码,导致邮件发送失败。两个问题在我们开发环境中都正常(其实是测试没有覆盖全面),是在客户环境中发现的。第一个问题搞了差不多一个月时间,因为客户是英文OS,英文eHR,英文邮件服务器,由于开发环境不能用外网,所以需要自己建英文的邮件服务器。最终只改了一个属性,第二个问题是到客户那里才发现原因的。这里时间没过过好日子。

一、发送邮件标题乱码其实很简单,其实与环境没有多大关系。原因是发送带中文的邮件到英文的邮件服务器,如果在中文OS下用outLook接收,显示正常,所以我们的测试人员一直没有测试到,如果用IE接收是则标题有乱码。最终发现把代码的Jmail的ISOEncodeHeaders属性设为true则可以,可我们有同事强烈反对这样做,他的理由是没有看到过关于jmail的例子把这个属性设为true的,虽然它的默认值就是true。可问题恰恰能解决,所以他最终也不能说什么,只是表明以后可能会出现意想不到的后果。直接建议领导购买正式的jmail组件。

二、客户部分人员的部分功能发送邮件失败。原因是我们的大部分功能都是以系统管理员身份发送邮件,可也有以登录者身份送邮件的功能。如果此时的邮件服务器是强smtp认证的,为什么说强smtp认证呢?这里解释一下,邮件服务器可以设置发送邮件是否需要进行smtp认证,如果不需要,则任意邮件地址都可以作为发信地址,包括不存在的邮件地址。需要认证的又分为两种,一种是普通的smtp认证,即一定要提供一个smtp存在的账号和密码来认证,与发送邮件的email地址没关系,也就是说发送邮件的地址也可以不存在,这种我把它叫做普弱smtp认证,另一种则是提供的smtp认证账号和密码一定是当前发送邮件的email地址的账号和密码,我把它叫做强smtp认证。现在问题出来了,我们的客户邮件服务器是强smtp认证的,但在我们系统中只提供了系统管理员的email的认证账号和密码,这样以非管理员身份登录系统用登录用户的email发送取管理员的smtp认证账号和密码来认证结果失败,直接导致发送邮件失败。真是让我对邮件服务器有了新的认识。发现了问题,改正就不是困难的事情。其实我们的开发环境中有两个邮件服务器,一个是不需要认证的,另一个是弱认证的,后来自己又用IBM Louts建了一邮件服务器,最多只能设置成弱认证的,强认证的不知道怎么设置或许exchange可以但没有试过?也请高手指点。所以我们的测试人员和开发人员一直没能发现这个潜在的大bug。经测试smtp.163.com是强认证的邮件服务器,但我们的开发环境中是不能访问的,所以测试也只能用内网的邮件服务器所以问题一直发现不了。真不知该说是谁的错。强smtp认证的原因应该是不给小人利用别人邮件服务器发送垃圾邮件的机会。

找到并解决问题是让人兴奋的事情,记录下来是为了给遇到相同问题的朋友不至于像我一样走太多弯路,也给自己开发道路上作一个标记。

同时提供为了解决上面问题写的一个测试程序,因为是在公司写的,代码不能带出来,所以没能提供源代码,不过需要的朋友可以反编译,同时没有提供群发和发送附件的功能,不过提供同步和异步发送邮件的功能,异步不能发送带有附件的邮件。乱码问题是经常会遇到的,其实发送出附件也很容易出现乱码,因为我们没有这方面的问题,所以我也没有太注意了。

 测试工具:DownLoad

posted on 2005-12-19 20:12  蝈蝈  阅读(2822)  评论(4编辑  收藏  举报