用电子邮件发表WordPress日志

8条评论

只要稍微更改WordPress设置,就可以通过电子邮件发表WordPress日志。要实现这个功能,我们需要:

1. 注册一个e-mail账号,专门用来发表WordPress博客日志

2. 更改WordPress设置以便访问上述e-mail账号

3. 对WordPress进行设置,使之能够通过e-mail发表内容

通过E-mail发表日志

第一步——重新注册一个e-mail账号

1. 以博客管理员身份登录WordPress后台。

2. 进入“设置”菜单下的“撰写”选项

3. 阅读页面下方“通过电子邮件发表”选项下的说明。紧接着说明后WordPress给出了三个我们可以用在新e-mail账号登录名中的随机字符串。

4. 我们可以利用WordPress建议用在登录名中的随机字符串(也可以自己设置其它名称),在虚拟主机的邮件服务器或独立邮件服务器上创建新e-mail账号的用户名(即“登录名”)。邮件服务器帮我们接收并存储邮件,以供日后检索。请不要在Yahoo、Hotmail等公共邮箱服务器上注册用于发表WordPress日志的e-mail账号。

注意:强烈建议用户使用相对隐秘的电子邮件地址——也就是说,这个电子邮件地址需要是常人难以猜到、只有用户本人知道的地址。任何投递到这个电子邮件地址的信件将会被发表在博客上,所以我们必须要保证这个地址绝对的私密。此外,有些电子邮件服务器不允许邮件账号完全由数字组成或以数字开头。因此注册前请先了解虚拟服务器的相关规定。

第二步——更改WordPress设置以访问上述e-mail账号

1. 新邮件账号注册完毕后,返回WordPress后台的“撰写”选项,填写虚拟服主机商提供给用户的邮件服务器地址端口号。(如果不确定具体的邮件服务器地址和端口号,可以在虚拟主机商网站的FAQ版块或用户手册版块中查找。端口号通常为110。)

2. 然后输入新邮件的登录名密码

注意:请在登录名输入框中填写完整的邮件地址(如user@example.com)。

3. 选择默认邮件发表分类目录。

4. 点击“保存更改”。

注意:如果在注册邮件账号前已经通过“管理界面>设置>撰写>通过电子邮件发表”设置了电子邮件地址,那么注册时的登录名和密码需要和之前的设置保持一致。

第三步——发表邮件日志

现在我们已经注册了新的邮箱账号,也在后台进行了设置,让WordPress博客能够接收新邮箱账号中的邮件。但我们仍然需要再次设置WordPress,让它能够自动发表接收到的邮件。我们可以进行以下任一操作:

手动浏览器激活方式

将邮件发送到新邮箱账号后,立即访问http://example.com/installdir/wp-mail.php。(注意:每次发送日志邮件后都要访问该URL。)

自动浏览器激活方式

如果不想手动激活浏览器,可以在博客页脚位置加上以下iframe代码,自动激活浏览器使之帮助发表日志:

<iframe src="http://yourblogdomain/wordpressinstalldir/wp-mail.php" name="mailiframe" width="0"

height="0" frameborder="0" scrolling="no" title=""></iframe>

编辑以上代码,使链接地址指向我们的wp-mail.php文件的位置。然后将代码添加到当前主题目录下的footer.php文件中(不要将代码包含在HTML段落中)。

可能还要刷新博客才能查看到新日志。对新用户来说,自动激活浏览器好处更多。

如果正在使用或希望使用WordPress的Postie Plugin插件,请将下列iframe代码添加到博客页脚中,代码将调用检查邮件的命令:

<iframe src="http://yourblogdomain/wordpressinstalldir/wpcontent/plugins/postie/get_mail.php?Submit=Run+Postie" name="mailiframe" width="0" height="0" frameborder="0" scrolling="no" title=""> </iframe>

之后只要有人访问我们的博客,新邮件就会自动发表到博客上,因此我们发送日志邮件后就可以高枕无忧了。不过可能要刷新博客才能查看到发表的新日志。

WP-Cron插件激活方式

下载、安装并激活WP-Cron插件。该插件无需用户进行后台操作,每十五分钟自动更新网站。

定时任务激活方式

这种方式利用wget、curl或是GET等命令行HTTP代理来设定一个UNIX定时任务,使博客定时查看http://example.com/installdir/wp-mail.php页面。需要执行的命令行如下:

wget -N http://example.com/installdir/wp-mail.php

如果使用的不是wget程序,请将代码行中的wget程序和wget参数替换成相应程序和参数。

注意:另一种方法是,在定时任务中运行 "php /full/path/to/wp-mail.php"命令。运行php脚本时只需要使用php而不再需要其它程序。(用户被授权使用php的机率也高于wget。)

关于定时任务的更多信息请看:

Windows用户请注意:也有适合Windows用户的类似定时程序。例如,VisualCronCron for Windows以及pycron。具体情况可以参考这些程序的使用说明。

Procmail激活方式

如果我们的服务器配备了procmail,那么只要在博客专用邮箱账号的主目录下使用.procmailrc就可以激活WordPress的发表动作了:

Shell=/bin/sh
MAILDIR=$HOME/.maildir/
DEFAULT=$MAILDIR
:0
{
:0Wc
./
:0
| wget -N http://example.com/installdir/wp-mail.php
}

当然我们可以执行更具体的动作,例如获取特定的对象表达式。更多信息请点击procmail

.qmail激活方式

如果服务器是用qmail来处理e-mai的l,那么发送日志邮件后,可以用qmail来调用wp-mail.php。但首先要创建一个小型shell脚本以调用wp-mail.php。我们可以先调用wp-mail文件:

#!/bin/sh  
/bin/sh -c "sleep 5; /path/to/php /path/to/your/blog/wp-mail.php > /dev/null" &  

sleep命令触发一个为时5秒的停顿,供qmail在调用wp-mail.php文件前完成对邮件信息的处理。注意:行末尾的&符号是必须的,不得省略。以上脚本应该放置在根目录下,执行位元也需要被设定(chmod 700)。为了消除系统中的bug,我们可以将/dev/null替换成一个文件名,以此保存wp-mail.php生成的结果。

接下来只要创建/修改相应的.qmail文件以调用shell脚本就大功告成了。将以下命令行输入邮箱名的.qmail文件:

|/path/to/your/root/directory/wp-mail  

.qmail文件的具体用法参见互联网服务提供商的说明手册。不同互联网服务提供商对邮箱名称的规定也有所不同。

邮件格式

通过邮件发表日志时,WordPress会将邮件的主题行作为日志标题,邮件正文作为日志正文,并删除其中常用的HTML标签。WordPress将日志发表在我们之前选择的默认邮件发表分类下,并默认网站管理员作为该日志的作者。

通过邮件发表日志时,不支持附件的发表。所有通过邮件发表的附件都会以原始形式显示在日志正文中。

测试

要测试目前自己是否已经能通过邮箱发送WordPress日志,只需要发送一封邮件到“新账号@邮箱域名” (如果使用.qmail程序,则可以将邮件发送到“用户名@邮箱域名”)。之后进行以下操作:

  • 如果没有设置自动系统,在浏览器中访问http://example.com/installdir/wp-mail.php。如果脚本发现有新邮件,会通知我们并显示出邮件日志的详细情况。之后我们可以返回博客查看日志是否发表成功。
  • 如果页脚使用的是iframe代码,需要刷新浏览器以查看日志是否发表成功
  • 如果用的是WP-Cron插件,则需要等待十五至二十分钟
  • 如果是运行定时任务,那么要等到定时任务下一次执行时才能查看日志发表状况(也可以暂时缩短定时任务的时间间隔)。如果定时执行 -f /var/log/cron,该任务运行结束后会生成log记录。生成log记录后,可以在浏览器中查看邮件日志的发表状况。
  • 我们的邮件发表状态可能被会标识为“审核中”而不是“已发表”。如果日志状态是“审核中”,那么该日志可以出现在控制板中,但不会显示在博客上。默认情况下,wp-mail.php会检查发送日志的邮件地址与博客用户设置的邮件地址是否一致。如果一致,日志状态显示为“已发表”,否则显示为“审核中”。

常见问题解答

下面列出了用邮件发表日志时遇到的一些常见问题,同时给出了解决方法。

错误信息

Ooops POP3: premature NOOP OK, NOT an RFC 1939 Compliant server

如果遇到这类错误信息,请打开wp-includes/class-pop3.php文件,将下面的代码:

if($this->RFC1939) {  

替换成:

if(!$this->RFC1939) {  

注意其中感叹号的使用。

错误信息:There does not seem to be any new mail(没有新邮件)

关于这个错误信息,以上描述并不准确——测试只是为了查看是否能检索到新邮件。

我们可以打开:

wp-mail.php

在其中查找:

$count = $pop3->login(get_settings('mailserver_login'), get_settings('mailserver_pass'));

将其后代码行替换为以下代码:

  if (0 == $count) :
    echo "There does not seem to be any new mail. <br/>\n";
    echo "count = $count<br/> \n"; 
    echo "$pop3->ERROR \n";
    exit;
  endif;

之后我们会看见更为详细的信息。

用户试图使用未加密的密码时,邮件服务器可能会拒绝连接——如 POP3。如果web服务器和邮件服务器在同一台电脑上,我们可以指定localhost或127.0.0.1作为邮件服务器。由于这时无需连接到互联网,即使不加密也可以顺利进行。

插件与功能扩展

下面介绍一些插件和修改方法(hack),帮助WordPress扩展用邮件发送日志的功能。其中有些方法可能涉及到核心文件的修改,因此操作时一定要谨慎,保持备份资料。

加强功能hack

原始wp-mail.php文件的替代文件:

  • Postie 可将日志发表到不同分类下,可自动删除邮件署名,支持POP3/IMAL (+SSL) ,等等

修改e-mail格式

对wp-mail.php进行优化处理,将e-mail转换成成日志的元数据:

发送人的邮件地址

优化后的wp-mail.php能够在用户数据库中查找邮件发送人的邮件地址。如果邮件地址和任何一个用户的邮件地址相匹配,wp-mail.php会以该用户的名义发表邮件日志。如果邮件地址不和用户邮件地址匹配,wp-mail.php会放弃对邮件日志的操作,不将日志发表到博客上。(这样既能保护博客安全又能防止垃圾邮件。)在From字段中设置该优化功能。

主题字段

如果邮件的主题行中出现[n]字样,该邮件会被发表在类别号为n的分类下。否则邮件将被发表在我们之前选择的默认邮件发表分类下。示例:若某邮件主题行是“ [1]这是一个测试!”,则将邮件作为日志发表时,日志名为“这是一个测试!”,日志所属分类为“常用”。

通过Yahoo! 邮箱、Gmail和Hotmail发表日志

默认情况下大多数基于网络的邮箱客户端都以HTML形式发送邮件,而WordPress“通过邮箱发表日志”这一功能并不支持HTML发送。

因此用这种邮箱发表日志前,一定要使用“普通文本”形式。

在Yahoo!邮箱中,“转换为普通文本形式”图标在“订阅”字样的右边。而Gmail中,“转换为普通文本形式”图标在文本格式工具栏的最右端。Hotmail的“转换为普通文本形式”图标则在邮件操作栏(位于邮件正文上方)的拼写检查图标附近。

官方支持

功能申请: Post via e-mail's Category: allow specification from inside the mail too

#1
我发现如果email的内容里有中文时,博客里会全部显示乱码。有解决方法吗?
#2
邮件正文必须是utf8编码
#3
I tried to use UTF8 to send the email, WP gets it as following(you can see the content below "Next line is in Chinese (UTF8)", how to solve this? Thanks for a lot. 中文主题 subject in Chinese in UTF8 =EF=BB=BF Next line is in Chinese (UTF8) size=3D2>=E4=B8=AD=E6=96=87=E5=86=85=E5=AE=B9
#4
"我们的邮件发表状态可能被会标识为“审核中”而不是“已发表”。如果日志状态是“审核中”,那么该日志可以出现在控制板中,但不会显示在博客上。默认情况下,wp-mail.php会检查发送日志的邮件地址与博客用户设置的邮件地址是否一致。如果一致,日志状态显示为“已发表”,否则显示为“审核中”" -------请问博主,我设置好了邮件,但是发现日志都在控制台里面“待审”状态,我特地在用户里面增加了一个邮件地址一样的用户,但是发现发送的日志还是待审……,我不是很理解,不知该怎么做
#5
你先试着刷新,然后再注意检查下你的邮箱,最后还不行的话,直接检查wordpress发布文章时的默认状态。 
#6
我也遇到同样的问题,所有通过邮件发布的文章都成了待审状态,具体怎么设置才能取消待审的文章呢?谢谢
#7
用wp用户的邮箱地址向投递地址发邮件
#8
宝贝, 你这篇文章的排版实在糟糕, 看到中间我就没耐心看下去了, 觉得文章正文和 文件代码在字体和字号上应该有区别,要不然你自己知道自己在说什么, 但读者则是眼花缭乱