找回密码
 立即注册

QQ登录

只需一步,快速开始

教程经验总索引TVMW5/小日本5 索引【视频转换】小日本4/TE4XP 索引【视频转换】TAW4 / TDA3 索引【DVD打包软件】
Nero 索引DVD-Lab 索引【DVD打包软件】编解码器 索引 【必读】固顶帖011号
查看: 2587|回复: 0

[教程] php的mail函数在WinXP+IIS环境下的应用/设置

[复制链接]

9333

威望

818

金钱

1万

贡献

管理员

自由的灵魂

积分
100458
主题
5590
回帖
26310
注册时间
2003-4-10
最后登录
2024-11-21
发表于 2012-6-10 18:12:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
【转贴】


为了搞一个投稿系统,不得不去研究一下php,因为能下载到的这方面代码主要是php的。

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

2. 调整smtp服务的权限:

这个是网上很多人问的问题,就是用php服务,在smtp服务打开的情况下,调用mail()函数,返回
  1. [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配置的是这一段:
  1. [mail function]
  2. ; For Win32 only.
  3. SMTP = localhost ; for Win32 only
  4. smtp_port = 25
  5. 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]. 这个是为什么我还不清楚,我猜是因为我的机器在内网?总之是这个邮箱有检测,要不然退信就发不到我另一个邮箱了。

来源:http://apps.hi.baidu.com/share/detail/47081904
IsaacZ的发言中如果提到任何字母缩写或专有名词,在本论坛中一般都能搜索到。点此立即搜索点拨论坛。如有搜索不到的,请尝试搜索百度百科,或者跟帖提问。
发帖前请注意看置顶帖。如果你发现自己的问题没有得到回答,说明你的问题提错了地方或者提问前未先阅读版规。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|点拨论坛 |网站地图

GMT+8, 2024-11-23 16:12 , Processed in 0.075301 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表