別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。

レシピはOpenPNEへ携帯から日記投稿機能の設定です。

以前会社でSNSを構築した際に、
SNSにOpenPNE,メールサーバーにPostfix + Dovecot + Procmailで構築したんですが、携帯からの投稿機能を最後の最後に回していて、すっかりわすれていたんですね。

実際に投稿しようとしてエラーになって、初めて思い出したんです。迂闊。
「こんなのちょろいだろ〜」とか思っていたのですが・・・

       大 苦 戦 ヽ(´Д`;)ノアゥア...

誰かが二の鉄を踏まないようにアップします。

まず構成を書いておきましょうか

メールサーバはPostfixを使っていて、受信用にDovecot。メール振り分けにProcmailを使っています。

受信メールをユーザーのメールボックスへ送信設定

SNSを立てた時に、送信側は設定していたんですけど受信側が手付かずだったので、まずこのマシンのユーザーにメールが届くように設定しました。

早速此処からトラブルです。/etc/log/mail.logを見ると、

 
(expanded from ): can't create user output file. Command output: procmail: Renaming bogus mailbox
"/var/mail/snsadmin" info "/var/mail/BOGUS.snsadmin.Xj0y" procmail:
Couldn't create "/var/mail/snsadmin" procmail: Couldn't chdir to
"/home/snsadmin/Maildir" procmail: Couldn't create or rename temp file
"./tmp/1162346941.5352_0.sns.example.com"

なんて事をおっしゃる。
要するに書き込み権限が無いよって言われているんだが・・・
Procmailって何の権限で動いているんだ!?

rootではないな・・・と思い。手当たり次第Mailboxをpostfix : postdropに設定して回るもダメ・。
仕方ないので、秘奥義" chmod 777 *" を発動。・・・全然ダメ。

行き詰まったので、google先生に質問すると、procmailrcが怪しい。
メーリングリストとか漁っていたら、書くユーザーのホームディレクトリに.procmailrcを書くと各ユーザーごとに反映されるらしい。

というわけで、実際に

SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/procmail.log

というファイルをホームディレクトリに置いてみたら、あっさりOK。デーモンがユーザー単位でrc読んでいるって感覚がよくつかめてないけど、とりあえず解決。

各ユーザー宛のメールは、ユーザの権限で書き込みされるようだ。具体的に言えば、hogeユーザーのMaildirにはhoge:hoge権限でOK

OpenPNEの携帯投稿スクリプトに受け取ったメールを転送

次に実際に携帯メールでsnsに投稿してみると・・・
あて先が[b2-1f.....386397@sns.example.com]のように乱数がユーザー名になっている・・・

これは参った。しかも全員違うらしい。

メール投稿の仕組みはメールの内容を "/OpenPneルート/bin/mail.php"に渡してあげればよいのだが・・・

メールアドレスのユーザー名と、システムのユーザー名をマッピングしているのがエイリアス (/etc/aliases または /etc/postfix/aliases)なのだけど、まさか此処に全ユーザー入れて、システムに全ユーザー登録するのも現実的でないし、毎回ユーザー名変わったらそれだけでアウト。

なんとかユーザー名以外で取りたい。
始めは正規表現でいけないかと思ったのだけれど、上手く行かない。regexpテーブルって有るんだけどなぁ・・・(´・ω・`)ショボーン

今度はvirtualドメインを使ってみるコレはいけそう!
と思いきや今度はvirtualドメインだとコマンドが投げられない。
・・・(,,゚Д゚)† (この辺りで悶絶)

この後あれこれ試して、ようやく見つけた解決法が、

これ

/etc/postfix/main.cf
virtual_alias_maps = hash:/etc/postfix/virtual
alias_maps = hash:/etc/aliases

/etc/postfix/virtual
@sns.example.com sns_mailphp

/etc/aliases
sns_mailphp: "|/usr/bin/php /var/www/sns/bin/mail.php"


要するに何をしているかというと、
virtual_host_mapsで/etc/postfix/virtualを読み込んで、此処で@sns.example.comドメイン宛に飛んできたメールをsns_mailphpという架空のユーザーに割り当て。
そのあとaliasesをlookupして、sns_mailphpがマッピングしている"|/usr/bin/php /var/www/sns/bin/mail.php"コマンドを呼び出す・・と。
(補足:ちなみにsns_mailphpというユーザーをOSに作成する必要はない)

こうしてみると結構単純なんだけど、知らなかったからえらい時間食った。

・・・やれやれ。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: OpenPNEへ携帯から日記投稿機能の設定

このブログ記事に対するトラックバックURL: http://hackmylife.net/mt/mt-tb.cgi/379

コメントする

このブログ記事について

このページは、hackmylifeが2007年2月18日 00:26に書いたブログ記事です。

ひとつ前のブログ記事は「SNSとBlogの決定的違いは読者の顔が見えているか?だと思う。」です。

次のブログ記事は「SSHの多段階接続 (公開鍵認証編)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0

アドセンス

MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore
MoMAstore
MoMAstore
MoMAstore