分享到:

 

哈哈哈……狂笑三声先,这个折腾的我脑袋都大了的问题终于解决了!关于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.phpwp_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内容哦),覆盖前请备份。

阅读量:1468 次| 分类: 网络 | 标签: ,

Leave Ur Comments

现已有 4 条评论,还差你一条哦!

Comments List

标题为“WP邮件发送(外部smtp)解决方案”的相关评论列表