用WordPress自带的PHPmailer发送留言邮件
by 我是管理员!
在WordPress中包括了很多开源的PHP类库,实际上WordPress有很多功能都是基于这些类库的,我们也可以在模板或者插件中调用这些类库。比如小狮这个博客的Contact页,用的就是WP自带的一个叫PHPmailer的一个类库,实现了留言回复直接发送到指定的邮箱,非常方便。
下面小狮就把代码公开出来,希望能帮到那些有需要的人,如果有PHP高手可以指教一下,小狮对PHP还是个门外汉呢
。
包含并创建实例
PHPmailer在WP中的的路径是wp-includes/class-phpmailer.php,在使用的时候需要把该文件包含进去,WP中包含文件的函数是require_once();,文件包含进来之后,就可以创建该类的新实例了,创建实例的代码也非常简单,跟大多数语言的创建方法一样:$mail = new PHPMailer;。
PHPmailer详解
创建PHPmailer的实例之后,还需要设置一些必要的参数,比如收件人地址、邮件主题、邮件内容等等,好让PHPmailer知道你要把邮件发送给谁以及发送哪些内容。
打开phpmailer.php文件之后,该类的结构和相关变量就一目了然了,这里小狮只把几个比较核心的参数写出来,剩下的大家可以自己去看。
方法函数:
- IsHTML($bool):设置邮件内容为HTML格式(可以带格式信息,如粗体、链接等)。
$bool:布尔值
返回值 :无 - AddAddress($address, $name = “”):添加一个收件人邮箱地址。
$address:字符串,收件人邮箱地址
$name:字符串,收件人姓名
返回值:无
- $Subject:字符串,邮件的主题。
- $Body :字符串,邮件内容。如果IsHTML为Ture,则字符串中的HTML字符将被解析成相应的格式。
- $From:发件人地址,默认是localhost.localdomain。在小狮的contact代码中是直接把留言者的邮箱地址作为发件人了。
- $FromName:发件人姓名,默认是Support。与$from一样,小狮把留言者的姓名直接作为发件人姓名了。
设置完这些参数之后PHPmailer已经知道你把什么内容发送给谁,但是现在还没办法发送,因为发送邮件是需要一个邮件发送服务器(SMTP Server)的,设置好SMTP 服务器的地址之后,PHPmailer就会把这些参数信息推送给这个SMTP服务器,让后由这个服务器把邮件发送出去。
代码如下:
$mail->IsHTML(true);
$mail->AddAddress("h198741@126.com"); // 收件人
$mail->Subject = $emailInfo_subject; // 邮件主题
$mail->Body = $emailInfo_body; // 邮件内容
$mail->From = $_POST["email"];
$mail->FromName = $_POST["names"];
设置SMTP Server
需要注意的是,如果不指定SMTP服务器的话,PHPmailer会使用localhost作为SMTP服务器来发送邮件,因为小狮租用的服务器自带一个邮件服务器,所以这里就没有设置SMTP也一样可以发送邮件。
现在有很多邮箱都把自己的SMTP服务器提供给注册用户免费使用,比如网易的126和Gmail,只要注册一个帐号就可以使用他们提供的SMTP服务器了。下面小狮把PHPmailer的SMTP相关设置介绍一下,其实只要用过Outlook之类的邮件客户端都能明白。
- $Host:字符串,SMTP服务器地址。一般都是smtp.126.com这种格式。
- $Username:字符串,SMTP服务器的登陆账户名。比如你注册的是126邮箱的话,就把你的126邮箱帐号写上就行了。
- $Password:字符串,SMTP服务器的登陆密码。同上。
IsSMTP(),作用是将PHPmailer的发送模式设置为SMTP模式。代码如下:
$mail->IsSMTP; //设置为使用使用SMTP服务器发送邮件的模式 $mail->Host = "smtp.gmail.com"; //使用Gmail的发件服务器来发送邮件 $mail->Username = "username"; //输入你在Gmail的用户名 $mail->password = "password"; //输入你在Gmail的密码
搞定,发送!
现在一切设置都已经完毕了,加上$mail-> send();这么一行代码就OK了!当执行到这一行的时候,程序就会按照参数将mail中的内容发送到指定的SMTP服务器上,SMTP服务器将会接收这些信息,并且按照其中的设置进行发送。
小狮的Contact页的完整代码如下(注意小狮是没有设置SMPT模式的哦):
<?php
if ($_POST) {
require_once(ABSPATH.WPINC.'/class-phpmailer.php');
// 实例化 PHPMailer 类
$mail = new PHPMailer;
$BR = "<br>";
$contact_senderName = "<b>".$_POST["names"]."</b>";;
$contact_senderEmail = "<a href='mailto:".$_POST['email']."'>".$_POST["email"]."</a>";
$contact_senderURL = "<a href='".$_POST["url"]."'>".$_POST["url"]."</a>";
$contact_senderPhoneNum = $_POST["contactnum"];
$contact_subject = $_POST["subject"];
$contact_msg = $_POST["message"];
$emailInfo_subject = "Contac Page的新消息:".$_POST["names"];
$emailInfo_body =
"姓名: ".$contact_senderName.$BR
."Email: ".$contact_senderEmail.$BR
."个人网站: ".$contact_senderURL.$BR
."联系方式: ".$contact_senderPhoneNum.$BR.$BR
."标题: ".$contact_subject.$BR
.$contact_msg;
// 填入最基本的参数
$mail->IsHTML(true);
$mail->AddAddress("h198741@126.com"); // 收件人
$mail->Subject = $emailInfo_subject; // 邮件主题
$mail->Body = $emailInfo_body; // 邮件内容
$mail->From = $_POST["email"];
$mail->FromName = $_POST["names"];
if(!$mail->Send()) // 发送邮件
{
echo "<p class='result'>信息发送失败, 请重新尝试或选择其他联系方式...</p>";
exit;
}
echo "<p class='result'>信息发送成功! 你的留言已经发送到Liony的邮箱中, 他会在稍后联系你.</p>";
}
?>
<form action="/contact" method="post" onSubmit="return checkfrm_contact();" id="contactform">
<fieldset>
<label for="names">姓名</label>
<input type="text" value="" maxlength="50" name="names" id="names"/>
<label for="email">E-mail 地址</label>
<input type="text" value="" class="t" maxlength="100" name="email" id="email"/>
<label for="url">个人网站</label>
<input type="text" value="" maxlength="100" name="url" id="url"/>
<label for="contactnum">联系方式</label>
<input type="text" value="" onKeyPress="return numbersonly(this, event)" maxlength="100" name="contactnum" id="contactnum"/>
</fieldset>
<fieldset id="msg">
<label for="subject">标题</label>
<input type="text" maxlength="100" name="subject" id="subject"/>
<label for="message">内容</label>
<textarea rows="12" cols="30" name="message" id="message"></textarea>
</fieldset>
<fieldset>
<button value="1" name="submit" type="submit">Submit</button>
</fieldset>
</form>
为什么我submit后页面出错?我都按你的代码来的呀~
@fooldy: 可能的原因有很多哦~~出错提示是什么呢?
very good post.
你好。看到你的关于写contact页的php代码,非常感谢分享。我的问题有些白痴。我想问有了这个contact的代码,怎么加入wordpress里面呢?我登录了wordpress的管理端,然后拷贝了你的代码,可是显示的页面会把所有的代码内容当文字显示出来。怎么样才能在wordpress里面用自己编写的php文件呢?非常感谢。