现在,通过 OpooPress Mailet 软件包,我们可以轻松地使用邮件来发表 OpooPress 文章了。这极大的增强了 OpooPress 的移动性。
只需要向指定的 Email 地址发送邮件即可发表博客文章。邮件格式最好采用纯文本,但不是强制的。
邮件的标题就是文章的标题,邮件的内容就是文章的正文,这就是 OpooPress Mailet 最基本的用法。关于自定义文章文件名、发布时间、标签、分类等高级应用请阅读后续章节。
利用邮件发表博客文章其实是一个比较通用的思路,不仅仅可以用在 OpooPress 这类的静态博客,也可以用在 WordPress 之类的动态博客上。其大致处理流程如下:
邮件转博客
程序进行处理;OpooPress Mailet 是使用 Apache Mailet API 编写的邮件处理程序,只能运行在 Apache James Server上,所以必须自己搭建邮件服务器。
基本需求
示例环境如下:
请参考该文档来安装 Java, Apache Maven 并安装和初始化 OpooPress 博客。完成后应该可以正常运行 OpooPress 的各种指令。
opoopress.mail.opoo.org
A
记录为 1.2.3.4
opoopress.mail.opoo.org
MX
记录为 1.2.3.4
james-binary-2.3.2.tar.gz
。/usr/local/
tar zxvf james-binary-2.3.2.tar.gz mv james-2.3.2 /usr/local/
chmod +x /usr/local/james-2.3.2/bin/*.sh
修改 James 脚本权限/usr/local/james-2.3.2/bin/run.sh
,第一次运行会生成 /usr/local/james-2.3.2/apps/james
目录Ctrl + C
停止 James/usr/local/james-2.3.2/apps/james/SAR-INF/config.xml
localhost
替换为您的域名,如 opoopress.mail.opoo.org
myMailServer
替换为你的域名,如 opoopress.mail.opoo.org
autodetect="true"
替换为 autodetect="false"
autodetectIP="true"
替换为 autodetectIP="false"
<dnsserver> <servers> <server>8.8.8.8</server> <server>8.8.4.4</server> </servers> ... </dnsserver>
RemoteAddrNotInNetwork=127.0.0.1
所在的节点,并去掉 <smtpserver/>
段 <authRequired>
和 <verifyIdentity>
节点的注释。OpooPress Mailet 本身是不需要修改该项配置的。/usr/local/james-2.3.2/bin/run.sh
启动 James,telnet
到 4555
端口进行管理。JAMES Remote Administration Tool 2.3.2 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands运行
adduser <username> <password>
添加邮件用户adduser site1 site1password adduser site2 site2password adduser site3 site3password添加用户后,可在邮件客户端(如 Foxmail)中进行测试。设置用户 site1, site2, site3 的 POP3 和 SMTP 地址为你的域名(如 opoopress.mail.opoo.org),然后使用第三方邮箱(如 Gmail)分别向这几个邮箱里发送邮件,检查邮件接收情况。也可以使用这几个邮箱互发邮件(需要按第五步配置允许外部调用 SMTP)测试其发送和接收情况。
安装 OpooPress Mailet 软件包。目前需要从源码打包 OpooPress Mailet 软件包。
git clone https://github.com/opoo/opoopress.git cd opoopress/mailet mvn package mvn dependency:copy-dependencies
运行后,会在 opoopress/mailet/target
目录中生成 opoopress-mailet-<VERSION>.jar
的软件包,并将依赖的 jar 包复制到 opoopress/mailet/target/dependency
目录。
将 opoopress/mailet/target/opoopress-mailet-<VERSION>.jar
和 opoopress/mailet/target/dependency
目录中的所有 Jar 包(junit 除外)复制到 Apache James 目录 /usr/local/james-2.3.2/apps/james/SAR-INF/lib/
下,如果 lib
不存在,则需要先创建。
mkdir /usr/local/james-2.3.2/apps/james/SAR-INF/lib/ cp target/opoopress-mailet-*.jar /usr/local/james-2.3.2/apps/james/SAR-INF/lib/ rm target/dependency/junit-*.jar cp target/dependency/*.jar /usr/local/james-2.3.2/apps/james/SAR-INF/lib/
修改 Apache James 配置 /usr/local/james-2.3.2/apps/james/SAR-INF/config.xml
,在 <spoolmanager><processor name="root">
节点中插入 OpooPress Mailet 配置
<mailet match="RecipientIsAndSenderIs=site1@opoopress.mail.opoo.org|writer@opoopress.mail.opoo.org,yourname@gmail.com" class="OpooPressMailet"> <site>/home/sites/opoopress-site1/site</site> <command>mvn op:deploy</command> </mailet> <mailet match="RecipientIsAndSenderIs=site2@opoopress.mail.opoo.org|writer@opoopress.mail.opoo.org,yourname@gmail.com" class="OpooPressMailet"> <site>/home/sites/opoopress-site2/site</site> <command>mvn op:deploy</command> </mailet>
每个博客(站点)都由一个 <mailet/>
节点来进行配置。 其中
=
后的字符串。邮件接收地址和邮件发送人地址中使用 |
分隔,多个地址之间使用 ,
分隔。只有接收地址和发送地址都匹配时,mailet 才会调用。接收地址都必须是当前 Apache James 服务器中有效的账户。发送地址可以是任意有效的邮件地址,如果使用当前 Apache James 服务器的账号作为发送人地址,则必须开启 James 的 SMTP 认证(参考前面章节)。mvn deploy
,会以 site 的上级目录作为工作目录(因为 pom.xml 文件位于该目录)。mvn deploy -Dsite=zh
,而 site 属性可能是 /home/sites/opoopress.com/zh
。/home/scripts/deploy_my_site.sh
cd /home/sites/opoopress-site1 mvn deploy git add site/source git commit -a -m "Add new post" git push
本章示例讲解的是 OpooPress Mail 的高级应用,文章开头已经讲过基本用法。
使用纯文本格式向指定的邮件地址(如 site1@opoopress.mail.opoo.org)发送文章内容,示例见下图
邮件标题
邮件的标题会被解析成文章的标题
和 name
。
标题
和 name
两个值通过以下规则解析:
|
,则分隔符前的是标题
,分隔符后的是 name
。 例如 “世界,你好|hello-world”,“世界,你好|hello world” 或者 “世界,你好|2013-08-13-hello-world.textile”标题
和 name
都等于 邮件标题。在确定 name
属性后,name
属性会被 SlugHelper 处理成 slug
形式。这个 slug
形式的 name
决定了将要生成的文章源文件的文件名,也决定了最后生成的文章的 URL(除非在内容里明确指定了 URL)。
通过以下一些示例来讲解 name
、文章源文件名
和 文章 URL
之间的关系,这里假设当前博客的 permalink
格式为 /article/${'$'}{name}/
,当前日期是2013年08月13日
:
邮件内容
邮件的内容即文章源文件的内容,其格式遵循 OpooPress 源文件格式:
title
变量,则使用上一步骤中解析出的标题。如果包含,则忽略从邮件标题解析出的标题。date
变量,则使用邮件标题中解析中的时间或者当前时间。上面图示的邮件发布后的效果见 http://demo.opoo.org/demo/。
邮件回复
OpooPress Mailet 运行过程情况会通过邮件回复给发件地址人,邮件的内容是:发生异常时的异常堆栈信息,成功执行命令时的输出,执行过程中的日志信息等,邮件的附件是该文章的源文件。示例如下:
File writen: /home/sites/mysite/site/source/article/2013-08-13-this-is-a-post-publish-by-email.markdown Execute command: mvn op:deploy ======================== [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building My OpooPress.com site 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- opoopress-maven-plugin:1.0.1-SNAPSHOT:deploy (default-cli) @ my-opoopress-site --- [INFO] The site directory is : /home/sites/mysite/site [INFO] Skipping install, site already installed. [INFO] Skipping sass compile, css file is up to date. [INFO] File '/home/sites/mysite/site/source/article/2013-08-13-this-is-a-post-publish-by-email.markdown' is newer than 'Tue Aug 13 07:08:08 UTC 2013' [INFO] Source file has been changed after time 'Tue Aug 13 07:08:08 UTC 2013', regenerate site. [INFO] Reading sources ... [INFO] Rendering ... [INFO] Writing files ... [INFO] Writing 2 posts [INFO] Writing 12 pages [INFO] Copying 1 assets directory [INFO] Generate time: 492ms [INFO] Destination [/home/sites/mysite/target/public/site] ...
出于安全性考虑。Apache James、OpooPress Mailet 安装、配置、调试完成后,必须再次修改 Apache James 配置文件 config.xml
。
<remotemanager/>
节点 enabled
改为 false
。<nntpserver/>
节点 enabled
改为 false
,并将 nntp-repository
中的 threadCount
为 0
。如果要以服务(后台进程)的形式运行 Apache James,请使用以下命令:
/usr/local/james-2.3.2/bin/phoenix.sh start
停止
/usr/local/james-2.3.2/bin/phoenix.sh stop
Source |
|