之前转载过一篇PHP发送电子邮件的文章,但是结果发现并不能实现中文内容发送,会乱码,加上我的服务器没有启动mail函数,所有就想把这个之间塞进去。
搜索了很多,但大多都是针对标题,或者不完善导致不成功,最后在这里找到了完整解决方案:http://ju.outofmemory.cn/entry/19102
将之前写的内容进行修改成如下内容:
$header = "MIME-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=UTF-8; format=flowed\r\n" .
"Content-Transfer-Encoding: 8Bit\r\n" .
"X-Mailer: GreySun.top/" . phpversion();//发送邮件的系统名,可自定义
原文如下:
$header = "MIME-Version:1.0\r\n";
if($mailtype=="HTML")
{
$header .= "Content-Type:text/html\r\n";
}
然后在发送即可。作者原文当中是HTML,原文我发现WP发的邮件里个一个连接无法显示。
要重置您的密码,请打开下面的链接:
<http://localhost/wordpress/wp-login.php?action=rp&key=OOgu4GmdVHPG8ZJ7fLQk&login=a>
html中吧这个链接解析为标签,导致无法显示。所有html改成plain,否则的话我还要去修改邮件正文的内容,很麻烦,加上我只需要发送通知即可,如果要发送内容更丰富的邮件,例如推送,则建议使用html。
【wordpress·发送邮件解决参考方案】
wp发送邮件涉及到3个核心文件,都是在/wp-includes目录下:
分别是调用函数集文件:pluggable.php
邮件发送管理类文件:class-phpmailer.php
以及邮件模块类:class-smtp.php
我的想法是直接跳过后两个函数直接发送
打开pluggable.php文件,找到wp_mail()函数,
将内容全部删除,然后修改为如下内容:
function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
require("../myfolder/bin/SMTP.php");
$smtp = new smtp(true);
return $smtp->sendmail($to,$subject,$message,$headers);
}
相应的,我吧之前函数的参数顺序做了修改
function sendmail($to, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
=>
function sendmail($to, $subject = "", $body = "", $additional_headers = "", $cc = "", $bcc = "")
这是最简便的方法,但并不是最可行的方法。
因为邮箱账号密码打包在类里,所有放在根目录以外的目录比较妥当。
顺便,我用WordPress弄的博客:http://www.greysun.top