5熊猫网

 找回密码
 免费注册

QQ登录

只需一步,快速开始

开启左侧
查看: 2712|回复: 0
 乐摄宝 发表于: 2012-1-17 23:42:53|显示全部楼层|阅读模式

[博客] 如何用邮件发wordpress中文博客

 [复制链接]
最近因为工作的关系,需要用mail来发WordPress中文博客,在按照官方的文档(http://codex.wordpress. org/Blog_by_Email)修改设置之后,发现发表中文博客只有标题,没有内容,而且标题为乱码,上网查了下资料,发现很多朋友也遇到了相同的问题,研究了半天没有找到解决办法,最后老大出马,很快就搞定了,现在就将详细的修改过程记录下来,以便其他的网友参考。
  首先,要使用WORDPRESS的mail功能,必须执行以下三步:
  1.申请一个用来收取文章的专用邮箱。
  申请一个名称个性的邮箱,并保证该邮箱不用做他用,名称标准以不被机器人猜到为最佳,这样可以避免收到大量的垃圾邮件,或者以管理员身份登陆后台,查看“设置–撰写–通过 e-mail 发表文章“,该处提供了三个随即字符串,也可以使用这三个字符串中的一个作为邮箱的用户名,
  2.配置WORDPRESS来连接这个邮箱。
  登陆后台,在“设置–撰写–通过 e-mail 发表文章“处填写刚刚申请的邮件服务器名,端口号(默认为110),登陆用户名、密码,以及发表文章所属的分类。
注:登陆用户名必须是全称,比如 user@example. com;
  3.配置WORDPRESS通过该邮箱来发表文章。
在配置好后台之后,需要触发一下读取邮件的程序才能发表文章,方法有很多种,这里介绍两种,其他的方法可以到官网查阅
  第一种:
  直接访问 http://example. com/installdir/wp-mail.php,也就是你的安装目录下的wp-mail.php文件,这种方法的缺点是每次更新都需要自己去访问这个地址,很不方便。
  这里介绍第二种:
<iframe src="http://yourblogdomain/wordpressinstalldir/wp-mail.php" name="mailiframe" width="0" height="0" frameborder="0" scrolling="no" title=""></iframe>
  将上面这段代码中的src修改为自己的博客地址后,复制粘贴到对应模板下的footer.php。下次有人访问你的网站便会自动将邮箱中的文章发表。
  好了,经过上面的设置,以后就可以通过邮件客户端发博客到上面设置的邮箱中了,但是有一个问题,发表的文章只要标题没有内容,而且标题为乱码,要想解决这个问题,首先要了解下MIME邮件的格式,具体的可以参考这篇文章(http://dev.csdn. net/article/18/18448.shtm)。
  在了解了MIME邮件格式之后,我们需要用客户端软件(这里以Foxmail为例),查看邮件的原始信息(快捷键ctrl+i),可以看到类似这样的字段:
Subject: =?gb2312?B?1tDOyg==?=
Date: Wed, 26 Nov 2008 09:12:04 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="──-=_NextPart_000_000B_01C94FA7.0C61F990"
This is a multi-part message in MIME format.
────=_NextPart_000_0040_01C94FEF.C3D5DA40
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
  可以看出这封邮件的主题是使用”?”分割,文字编码是GB2312,内容使用base64编码格式传送,在收集到这些信息以后,我们再来简单的看下wp-mail.php是如何工作的。
  (根据版本不同,代码可能稍有不同)
  找到第20行:
$phone_delim = '::';
  这一行定义了邮件主题中的分割符,将这个改为
$phone_delim = '?';
  然后找到第60行:
if (preg_match('/Content-Transfer-Encoding: /i', $line)) {
$content_transfer_encoding = trim($line);
$content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding)-14);
$content_transfer_encoding = explode(';', $content_transfer_encoding);
$content_transfer_encoding = $content_transfer_encoding[0];
}
  这段代码是获取当前邮件的传送格式,因为是base64编码,故将其改为以下的代码
if (preg_match('/Content-Transfer-Encoding: /i', $line)) {
$content_transfer_encoding = trim($line);
$content_transfer_encoding = substr($content_transfer_encoding, 27);
$content_transfer_encoding = explode(';', $content_transfer_encoding);
$content_transfer_encoding = $content_transfer_encoding[0];
}
  然后是获取邮件的主题部分,在75行的位置
// Captures any text in the subject before $phone_delim as the subject
$subject = explode($phone_delim, $subject);
$subject = $subject[0];
  因为是中文的邮件标题( Subject: =?gb2312?B?1tDOyg==?= ),故将其改为
// Captures any text in the subject before $phone_delim as the subject
$subject = explode($phone_delim, $subject);
$subject = $subject[3];
  之后的这段改动比较大,从147到160行,因为邮件标题和内容使用GB2312格式,故需要将其进行转化为UTF8格式,如果邮件默认编码为UTF8格式,此步需要稍作修改。
$subject = trim($subject);
if ($content_type == 'multipart/alternative') {
$content = explode('--'.$boundary, $content);
$content = $content[2];
$content = explode(’Content-Transfer-Encoding: quoted-printable’, $content);
$content = strip_tags($content[1], ‘<img><p><br><i><b><u><em><strong><strike><font><span><div>’);
}
$content = trim($content);
if (stripos($content_transfer_encoding, “quoted-printable”) !== false) {
$content = quoted_printable_decode($content);
}
  将其替换为:
$subject = trim($subject);
$subject = iconv("gb2312","UTF-8",base64_decode($subject));
//如果为UTF8,上面的这条语句修改为 $subject = base64_decode($subject);
if ($content_type == 'multipart/alternative') {
$content = explode('--'.$boundary, $content);
$content = $content[1];
$content = explode(”\r\n\r\n”, $content);
$content = strip_tags($content[1], ‘<img><p><br><i><b><u><em><strong><strike><font><span><div>’);
}
$content = str_replace(”\n”,”",$content);
$content = str_replace(”\r”,”",$content);
$content = trim($content);
$content = iconv(”gb2312″,”UTF-8″,base64_decode($content));
//如果为UTF8,上面的这条语句修改为 $content = base64_decode($content);
  经过测试,修改之后的代码已经能够支持大部分中文邮件了,可以取到邮件的内容和标题,而且没有乱码,不过这里只是想起到一个抛砖引玉的作用,如果有其他的情况,可以根据自己的实际情况做些处理,如有错误之处,也请广大网友指出、批评,以达到共同学习的目的。
『 5熊猫网 』提醒,在使用本论坛之前您必须仔细阅读并同意下列条款:
  1. 遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规,并遵守您在会员注册时已同意的《『 5熊猫网 』管理办法》;
  2. 严禁发表危害国家安全、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容;
  3. 本帖子由 乐摄宝 发表,享有版权和著作权(转帖除外),如需转载或引用本帖子中的图片和文字等内容时,必须事前征得 乐摄宝 的书面同意;
  4. 本帖子由 乐摄宝 发表,仅代表用户本人所为和观点,与『 5熊猫网 』的立场无关,乐摄宝 承担一切因您的行为而直接或间接导致的民事或刑事法律责任。
  5. 本帖子由 乐摄宝 发表,帖子内容(可能)转载自其它媒体,但并不代表『 5熊猫网 』赞同其观点和对其真实性负责。
  6. 本帖子由 乐摄宝 发表,如违规、或侵犯到任何版权问题,请立即举报,本论坛将及时删除并致歉。
  7. 『 5熊猫网 』管理员和版主有权不事先通知发帖者而删除其所发的帖子。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

© 2002-2025, 蜀ICP备12031014号, Powered by 5Panda
GMT+8, 2025-5-1 07:08, Processed in 0.109200 second(s), 9 queries, Gzip On, MemCache On
快速回复 返回顶部 返回列表