Programming Life
相信不能相信的,完成不能完成的。矛盾,就象征进步。
posts - 151,comments - 7,trackbacks - 0

php在IIS环境中的配置就不多说了,用windows下的php安装文件的话不会遇到什么问题。

困难的事情是发送电子邮件的设置,php有个默认的发送邮件的函数mail,这个函数的说明可以在php的官方网站找到(我觉得是官网,也不一定。。。):

http://cn.php.net/manual/zh/ref.mail.php#ini.smtp

貌似这个函数只支持没有身份验证的smtp服务器,所以要把本机上的smtp服务器开成没有身份验证的。

配置的过程中有两个问题:一是smtp的配置,二是php方面的配置(php.ini文件)。

smtp的配置,最终目标是使得IIS自带的smtp server可以正常的发信,这中间我经过了好几个步骤,还是学了点东西:

1. 启动smtp服务。

            打开iis,发现我这儿的“默认smtp虚拟目录”居然画了“叉”,不能用啊,右键启动,又说启动不了,请去“事件查看器”看log。这个“事件查看器”在控制面板->管理工具下面,smtp的事件信息在“系统”一栏,“来源”是“SMTPSVC”。

            的确是有出错的项目,双击打开看,提示错误号115,请去下面的网站找:

http://www.microsoft.com/contentredirect.asp

            这个是microsoft的技术支持网站,还是挺不错的,不过建议搜索的时候在英文网页中搜索,因为很多中文网页都是英文网页直接用翻译机翻译过来的,不容易看懂。。。

           搜索smtpsvc 115 最后在这个网页找到了办法:

http://support.microsoft.com/kb/322023/en-us

           大致是说25端口被占用了,在cmd下用下面的命令查看,

Netstat -an | find ":25"

           其实应该用 netstat -ano | find ":25",因为这样可以看到占用的进程id,然后再去任务管理器中查看对应的id,发现是ccproxy(我机器上开的一个代理服务器软件),也提供了smtp代理,占用了25端口,于是禁用ccproxy中的smtp代理服务,终于可以打开“默认smtp虚拟目录”了!

2. 调整smtp服务的权限:

            这个是网上很多人问的问题,就是用php服务,在smtp服务打开的情况下,调用mail()函数,返回

[function.mail] SMTP server response: 550 5.7.1 Unable to relay

            这个在下面这个网页找到了解决方案:

http://blog.csdn.net/aifox/archive/2006/01/26/589117.aspx

            关键是:

“据说是中继的问题
然后依照指示
虚拟服务器->属性->访问->中继
将那个复选框选好,然后再添加了127.0.0.1的本地地址
测试,ok”

             我也是按照这个步骤做的就对了,这个地方实际上是smtp本身的权限设置,就是允许哪些地址来的请求,居然本机地址不在默认允许之列(实际上默认允许之列没有任何地址)。这样就可以发邮件了。

3. php的配置:php.ini

            找到windows目录下的php.ini文件,这是php的动态配置文件,里面内容很详细了,关于mail配置的是这一段:

[mail function]
; For Win32 only.
SMTP = localhost ; for Win32 only
smtp_port = 25
sendmail_from= me@localhost ; for Win32 only

           其中sendmail_from是提交给smtp服务器的发信人地址,如果这封信没发到,那么smtp会根据这个地址把信退回来,并附上错误信息。我就是第一次没发到,结果去smtp的路径C:\Inetpub\mailroot\Queue下面一看,发现一封名字无法识别的邮件,打开一看才知道是发向me@localhost的退信。

 

          到这里mail函数相关的配置就都有了,不过我这里还有个问题:就是那封退信的内容,退信是发到邮箱了,但是原信为什么没发到呢?看了退信的内容才知道,原来是对方的邮件服务器拒掉了,理由是Diagnostic-Code: smtp;554 Connection refused(mx). MAIL FROM [me@localhost] mismatches client IP [xxx.xxx.xxx.xxx]. 这个是为什么我还不清楚,我猜是因为我的机器在内网?总之是这个邮箱有检测,要不然退信就发不到我另一个邮箱了。

posted on 2008-01-02 03:55 Prog 阅读(1735) 评论(0)  编辑 收藏 引用 网摘 所属分类: PHP

只有注册用户登录后才能发表评论。
网站导航: