別の所に書いていた日記なんですが、エライ苦戦したので、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に作成する必要はない)
こうしてみると結構単純なんだけど、知らなかったからえらい時間食った。
・・・やれやれ。
カテゴリ
Linuxトラックバック(0)
このブログ記事を参照しているブログ一覧: OpenPNEへ携帯から日記投稿機能の設定
このブログ記事に対するトラックバックURL: http://hackmylife.net/mt/mt-tb.cgi/379
















コメントする