本帖最后由 shenmao1989 于 2010-6-26 22:57 编辑
本文不是将怎样配置IIS下面的SMTP的,详情请看php的mail函数在WinXP+IIS环境下的应用/设置这篇文章。
注意在
虚拟服务器->属性->访问->中继
将那个复选框选好,然后再添加了*.*.*.*(一定要填写服务器的公网ip,稍后解释)的本地地址
但是这样之后我们在discuz的后台如下配置:
接着进行测试:
这样测试是完全可以成功的,但是如果发件人或者收件人是username user@domain.com这样的格式就不能发送了,也许是iis的服务器不能个支持这样的格式(本人不才,如果高人看到请指教具体原因)
对于论坛上面说到的情况就是这样,后台测试成功,但是在注册或者找回密码或者邀请码发送时候就发送不出去了。
找到原因就好办了,打开sendmail.inc.php文件,修改两处代码:
第一处:
$email_from = $email_from == '' ? '=?'.$charset.'?B?'.base64_encode($bbname)."?= <$adminemail>" : (preg_match('/^(.+?) \<(.+?)\>$/',$email_from, $from) ? '=?'.$charset.'?B?'.base64_encode($from[1])."?= <$from[2]>" : $email_from);
改为
$email_from = $email_from == '' ? $adminemail : preg_match('/^(.+?) \<(.+?)\>$/',$email_from, $from) ? $from[2] : $email_from;
第二处:
$tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser, $to) ? ($mailusername ? '=?'.$charset.'?B?'.base64_encode($to[1])."?= <$to[2]>" : $to[2]) : $touser;
改为
$tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser, $to) ? $to[2] : $touser;
再测试邮件就成功发送了。以上希望对大家有帮助
同时刚才说到中继要填写服务器真实IP,这是由于如果不设置这些就会使收到的邮件被判定为垃圾邮件。但是只是这样设置也是不够的,还需要在php.ini配置的时候也填写真是IP,而不是填写127.0.0.1 。
接下来你还需要绑定你自己的域名到刚才的IP,比如我的bt.sicau.org,那么发送邮件时候设置发件人为XXX@bt.sicau.org 那么邮件就不会再直接进入QQ,gmail等的垃圾箱了。
以上初步解决RDNS的问题。
原文地址:http://www.feeqi.com/?p=95002
|