
哈哈哈……狂笑三声先,这个折腾的我脑袋都大了的问题终于解决了!关于windows下面IIS不支持mail函数的问题,具体表现为:当新用户注册Wordpress帐户的时候,填写好用户名称和邮件,点击注册,会提示出现“电子邮件发送出错。可能是因为您的服务器禁用了mail() 函数。”的提示,因为我买的是win平台IIS服务器,根本没有sendmail功能,我看到这个提示的时候顿时头冒青烟——又可以忙活一阵子了,上网google了好多天,试用了好多方法都没有解决,今天无论如何也得有个结果,老天怜悯,终于可怜可怜我了……
参考了两位前辈的文章,结合了一下,具体方法为(想省事儿的点这里):
=========== 第一步 ===========
1. 打开/wp-includes/目录下的class-phpmailer.php,查找class.smtp.php将其替换成class-smtp.php(官方的phpmailer两个文件名分别是class.phpmailer.php和class.smtp.php,放在WP以后,可能是为了统一文件命名方式就改成了class-phpmailer.php和class-smtp.php,但忘了将里面调用的文件名一起修改了,呵呵)
=========== 第二步 ===========
2. 在/wp-includes/目录下新建立mail.inc.php(设置发送邮件需要使用的smtp),代码如下:
<?php
require(“class.phpmailer.php”); //(注意这里,class.phpmailer.php;须改成class-phpmailer.php )
class MyMailer extends PHPMailer {
// Set default variables for all new objects
var $Mailer = “smtp”; // Alternative to IsSMTP()
var $CharSet = “utf-8″;
var $From = “你的邮件地址”;
var $FromName = “name,你想起什么名字都可以”;
var $Host = “smtp服务器地址”;
var $Port = 25; //smtp server port
var $SMTPAuth = true;
var $Username = “你邮件的帐号”;
var $Password = “你邮件的密码”;
//var $SMTPDebug = true;
var $WordWrap = 75;
}
?>
=========== 第三步 ===========
3. 打开/wp-includes/pluggable.php,查找function wp_mail($to, $subject, $message, $headers = ”) {
global $phpmailer;在global $phpmailer;其前面添加如下代码:
require(“mail.inc.php”);
$mail = new MyMailer;
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $message;
return $mail->Send();
=========== 第四步 ===========
4. 在此文件中查找wp_new_user_notification函数,修改其中的一行代码:
把
wp_mail($user_email, sprintf(__(‘[%s] Your username and password’), get_settings(‘blogname’)), $message);
修改成
@wp_mail($user_email, sprintf(__(‘[%s] Your username and password’), get_settings(‘blogname’)), $message);
=========== 第五步 ===========
5. 在文件结尾?>前添加如下代码:
if ( !function_exists(‘wp_mail_attachment’) ) :
function wp_mail_attachment($to, $subject, $message, $string, $filename, $encoding, $type) {
require(“mail.inc.php”);
$mail = new MyMailer;
$mail->AddAddress($to);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AddStringAttachment($string, $filename, $encoding, $type);
return $mail->Send();
}
endif;
===========完成 ===========
OK,到此只需要在mail.inc.php中设置好smtp服务器地址,端口,用户名和密码就可以使用非SSL SMTP Server(比如163)发送邮件了.
来源:http://blog.csdn.net/Redecor/archive/2007/06/07/1641553.aspx
=========== 注意 ===========
PS:测试的时会发现用户注册的时候,收不到wordpress发出的带有初始密码的邮件(也就是没办法完成注册)。后问题出现在./wp-includes/pluggable-functions.php 中wp_new_user_notification调用了两次wp_mail函数,一次用来通知blog管理员,一次用来发送给新注册用户密码。可能是smtp服务器的问题,不能间隔太短发送邮件,所以屏蔽掉下面的代码。让wordpress在有新用户注册的时候不再给管理员发送邮件,测试成功!
注释掉如下代码:
//@wp_mail(get_settings(‘admin_email’), sprintf(__(‘[%s] New User Registration’), get_settings(‘blogname’)), $message);
来源:http://www.iplinger.com/archives/178
=========== 省事 ===========
点击这里下载我修改好的源文件,可以下载下来直接覆盖到相应位置(当然不要忘记修改里面的mail.inc.php内容哦),覆盖前请备份。
Leave Ur Comments
现已有 4 条评论,还差你一条哦!