wordpress发邮件

在虚拟主机上安装WordPress并且能够发送邮件,可以实现诸如网站新用户注册时可以通过邮件发送密码、新评论提醒、定期发送数据库备份等功能。

有两种方式来发送邮件:使用PHP的mail函数和使用SMTP代发。

1、PHP的mail函数

先测试主机函数是否支持。复制以下代码,建立mail.php,上传至虚拟主机目录,运行。

<?php

$to = “someone@example.com”; // 修改这个变量,改成要发送的目的邮件地址
$subject = “Test mail”;
$message = “Hello! This is a simple email message.”;
$from = “someonelse@example.com”;
$headers = “From: $from”;
mail($to,$subject,$message,$headers); // mail()函数
echo “Mail Sent.”;

?>


如果看到网页显示“Mail Sent.”并且没有报错,在填写的目的地址的邮箱里收到发出的邮件,说明主机支持mail()函数。
注意:PHP mail函数受到php.ini的影响限制。

为什么会有邮件无法发送?WordPress默认的发送邮件的方式就是使用PHP的mail()函数,而mail()函数使用的确是 *nix 的Sendmail程序。大多数无法发送邮件的原因就在于此。Sendmail是在Unix/Linux环境下使用最广泛的实现邮件发送/接受的邮件传输代理程序,如果使用的是win主机,或者mail()函数被禁用,或者linux主机没有安装邮件服务器,或者是php.ini配置问题限制无法修改,邮件就会无法发送,此时就要使用SMTP方法了。

2、SMTP方式
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。

如何使用SMTP,我们先了解一下邮件投递过程。一般情况下,我们把电子邮件程序分解成用户代理(MUA),传输代理(MTA)和投递代理(MDA)。用户代理(邮件客户端) 如:outlook express、foxmail —> 传输代理(负责邮件的转发,以及接收其他邮件服务器发来的邮件) 如:sendmail —> 投递代理(投递到最终用户) 如:procmail。
结构图:user—>Email Server—>Email server—>user

先测试主机是否能连接到外域的邮件服务器。复制以下代码,建立testmail.php,上传至虚拟主机目录,运行。

<?php

if(!function_exists(“fsockopen”)) {
echo “系统不支持fsockopen函数,请联系空间商”;
}
$fp = fsockopen(“smtp.foxmail.com”, 25, $errno, $errstr, 60); //这里是foxmail
echo $fp;
echo “<br>”;
if(!$fp) {
echo “联接失败了”;
} else {
echo “联接成功哦”;
}

?>

如果提示连接失败,说明您的空间无法连接邮件服务器,请联系空间商协助解决。
如果提示Warning: fsockopen(): unable to connect to smtp.foxmail.com:25 in \wwwroot\testmail.php on line 2 说明您的空间不支持 fsockopen()函数,需要联系空间商。独立主机的话,需要您的服务器开启 25 端口以及支持 fsockopen()函数。
以上代码可参考:http://bbs.idcspy.com/thread-72928-1-1.html

或者可以直接telnet到网站25端口测试能否使用本地server的SMTP服务器(即网站所在的这台服务器)。

telnet www.XXX.com 25

如果收到来自远程服务器的220消息,说明连接成功,比如:

220-tornado.arandomserver.com ESMTP Exim 4.69 #1 Sun, 12 Dec 2010 04:38:17 -0800

220-We do not authorize the use of this system to transport unsolicited,
220 and/or bulk e-mail.
421 tornado.arandomserver.com: SMTP command timeout – closing connection

失去了跟主机的连接。

C:\Documents and Settings\Administrator>

以上说明可以连上SMTP服务器,但是空间商禁止使用SMTP发送邮件。。。

我们可以使用WP Mail SMTP插件,来实现SMTP发邮件功能。

参考文档:
让 WordPress 通过 SMTP 发送邮件
http://goto8848.net/2008/04/wordpress-mail-via-smtp/