打造最智能的邮件发送配置程序!
- 原创
- 2012-07-10 21:30:47
- 王春生
- 6300
邮件提醒是各种管理系统必备的功能,但发信参数的配置,却不那么简单。需要配置的参数有发信邮箱,smtp服务器地址,端口,smtp服务器的用户名,密码等这些参数。这些参数对那些熟悉smtp的用户来讲,还是比较简单的,但对于很多普通的用户,就没有那么简单了。表现出来就是有很多的用户问邮件如何配置。
为了解决这个问题,我们尝试提供了常见邮箱服务商的配置插件,比如263的,163的等等。里面内置了相应的smtp服务器的地址,端口等信息。解决了部分问题,但还不够彻底。后来我们又尝试在禅道里面内置了一个邮件配置功能,把这些参数的配置放在了一个页面中,但还是问题不断。于是乎痛下决心,一定要彻底解决这个问题,于是就有了 禅道3.2版本全新的邮件配置功能,先让我们来看下界面吧:
随便输入一个发信的邮箱,比如我用gmail的邮箱:
然后就会出现下面的配置界面:
怎么样?神奇不神奇?我们系统已经自动判断出来这个邮箱是gmail提供的,它的smtp服务器地址,端口号,账户名,是否加密都可以推算出来,您所需要的只需要填写密码就可以了。
做到这一点还是比较简单的,下面让我们来试试这个邮箱:
这是我们公司的邮箱,使用的是腾讯的企业邮局,怎么样?我们同样可以推算出smtp服务器上smtp.qq.com,同时smtp的帐号名是完整的邮箱地址。
好了,下面来和大家说下程序是如何实现的吧:
首先,根据用户输入的邮箱,将其拆成用户名和域名后缀。拿到域名后缀之后,我们会尝试到系统的配置文件里面查找有没有这个域名的邮箱配置参数。
如果能够找到配置,就直接取配置里面的参数就可以了。
如果域名没有相应的配置,比如第二次输入的cnezsoft.com后缀的邮箱,我们则尝试通过dns查询,获得其mx记录。比如cnezsoft.com这个域名,我们可以在windows下面是用nslookup命令来查询:
通过查询mx记录,就可以得知cnezsoft.com这个域名的邮箱其实是由qq.com来提供服务的。这样就简单了,拿到这个mx的域名之后,再到配置文件里面查找有无对应的参数就可以了。
如果mx记录在配置文件里面还没有信息,则我们尝试链接smtp.domain.name的25端口和465端口。如果这两个端口能够链接,则我们认为这个域名的smtp服务器就是smtp.domain.name。
总结:
1. 归纳整理,把邮箱分为公共邮箱、企业邮箱、自有邮箱三种类型,程序实现思路逻辑就非常的清晰。
2. 我们删掉了phpmail, sendmail两种配置,因为这两种几乎用不到,就删掉了。
3. 尽量通过程序自动的计算,减少用户理解的歧义、错误,同样也减少了技术支持的成本。
技术小难点:
1. 获得mx记录。php有一个函数getmxrr(),但这个只能在linux系统下面运行。所以windows下面需要调用nslookup命令来获得。
2. 尝试链接smtp服务器的25或者465端口的时候,会存在网络超时的问题。还好php的ini_set可以设置: ini_set('default_socket_timeout', 3);