wp-mta導入 メールで投稿可能に (Postfix+procmail使用)

配布元:WordPress Plugins/JSeries » wp-mta
せっかく自宅サーバだし、MTAも自由に触れる環境にあるのでwp-mtaの導入をしてみることに。
このスクリプトはメールサーバにメールが着信したタイミングで実行されるため、WordPressの標準機能にあるメールでの投稿に比べるとメール送信から反映されるタイムラグが無くて良い。

設置方法は、ほぼ配布元にある手順どおり。
違う部分は.forwardを使う部分をprocmailに変えたくらい。あとはスクリプトがウチの環境だと上手く動かなかったところを簡単に手直しさせてもらいました。

procmailを使っている理由は、Postfixでのメール配信にvirtualを使っていて.forwardが使えなかったため。メール受信時にこのスクリプトがキックできれば方法は何でも良いはず。(実際うまくいきました)

1.まず設定書き換え (デフォルトのままで使いました)

2.PEAR::Mail::mimeDecode.php インストール
とりあえず入っているか確認。

# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.2 stable
Console_Getopt 1.2.3 stable
PEAR 1.6.1 stable
Structures_Graph 1.0.2 stable

で、入っていないっぽいので、pear install コマンドでサクッと。

# pear install Mail_mimeDecode
downloading Mail_mimeDecode-1.5.0.tgz …
Starting to download Mail_mimeDecode-1.5.0.tgz (9,281 bytes)
…..done: 9,281 bytes
downloading Mail_Mime-1.5.2.tgz …
Starting to download Mail_Mime-1.5.2.tgz (22,176 bytes)
…done: 22,176 bytes
install ok: channel://pear.php.net/Mail_mimeDecode-1.5.0
install ok: channel://pear.php.net/Mail_Mime-1.5.2

3. ~/.procmailrc レシピ追加

:0
* ^To: hogehoge@example.com ←受信用のメールアドレスに変更
|/usr/bin/php [wordpress-root]/wp-mta.php

4.wp-mta.php コメントアウト (12-15行目)
[php num=12]
#if (! defined(‘WPMTA_DEBUG’) && ! isset($_SERVER[‘RECIPIENT’])) {
# echo “Oops! Not launched from dot-qmail/dot-forward file!\n”;
# exit;
#}
[/php]

5.wp-mta.php function yn_photo_sub_dir修正 (415行目付近・ちょっとずれてるかも…)
なぜか mkdirでの再帰作成時のパーミッションがYYYYは700で、MMは755で作成され、画像表示が出来ないためMMのみでなく、YYYYも強制的にchmodするようにした。
mkdirをrecursiveで実行した際にそうなるっぽいのだが、原因不明。切り分けはきちんと出来ていないが、まあ、自分が使うだけのスクリプトなのでよしとする。
使用中のPHPバージョンは PHP 5.2.0-8+etch7 (cli) (built: Jul 2 2007 21:46:15)、ウチだけかなぁ。
[php num=415]
function yn_photo_sub_dir($post_time_local) {
$dir = WPMTA_PHOTO_DIR . gmdate(‘Y/m’, $post_time_local);
$dir2 = WPMTA_PHOTO_DIR . gmdate(‘Y’, $post_time_local); //これ追加
if (! is_dir(ABSPATH . $dir)) {
if (! mkdir(ABSPATH . $dir, 0755, TRUE)) {
echo “Error: Can’t create thumbnail folder.\n”;
return WPMTA_PHOTO_DIR;
}
chmod(ABSPATH . $dir2, 0755); //これ追加
chmod(ABSPATH . $dir, 0755);
}
return $dir . “/”;
}
[/php]

6.wp-mta.php 一部変更 冒頭
dot-qmailからの呼び出しかどうかをチェックしている部分があるが、その代わり。上記でコメントアウトした部分の下に。
コマンドライン引数が空だったら、CLIで実行されていないものとしてサイトのトップページにリダイレクト。
放っておいても実害は無いが、ちょっと気持ち悪いので。
ただし、結果的に多分動いているからOKレベルなので、この実装で本当に正しいかは謎。
[php]
// —– Check if launched from CLI —–
if (! defined(‘WPMTA_DEBUG’) && ! $argc > 0) {
$host = $_SERVER[‘HTTP_HOST’];
$uri = rtrim(dirname($_SERVER[‘PHP_SELF’]), ‘/\\’);
header(“Location: http://$host$uri/”);
exit;
}
[/php]

これで、wp-contensの下にphotosディレクトリを作成して、メール受信ユーザのIDにchownしておけば動作する。
便利なスクリプトを公開して下さったyuriko氏に感謝!

2007-08-02追記
function yn_images2htmlの一部修正。
WordPressを/(ルート)にインストールしてるのですが、その場合、画像へのリンクのURLに/が1つ多く付いてしまうので。
[php]
$short_url = preg_replace(‘#^https?://[^/]*/?#’, ‘/’, get_bloginfo(‘wpurl’)) . ‘/’;

$short_url = preg_replace(‘#^https?://[^/]*/?#’, ‘/’, get_bloginfo(‘wpurl’));
[/php]
相変わらず結果オーライの場当たり的対応です。。。

投稿者: kuni

サイトの管理人です

ディスカッションに参加

3件のコメント

  1. wp-mta のご利用ありがとうございます。ご指摘の内容に基づいてスクリプトを修正しています。
    パーミッションの件は、umask が悪さしていると思われます。PHP のマニュアルによると umask() 関数は使わない方がいいと書かれているため、makdir は2回に分けることにしました。yn_images2html() はバグなので修正しました。
    もうちょっとテストしたら公開しますので、しばらくお待ちください。

  2. yuriko様、コメントありがとうございます。
    PHPがさっぱり分からない状態でさわっていたので、作者様に直していただけると安心します。
    公開されましたら利用させていただきます。

  3. ピンバック: Yuriko.Net
コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください