Warning: Error while sending QUERY packet. PID=10254 in /home/uls/public_html/wordpress/wp-includes/class-wpdb.php on line 2351 FreeBSDな生活

2004.12.25

mail-entry.cgi(自動化成功)・・・(Movabletype)

手動では成功するが、cronだとメールがどうしても拾えないので別手段を講じることにした。
テキストベースのブラウザのw3mの利用です。
以下はその手順

  • abcblogのhome directory内に .forwardの名前でファイルを作り以下の内容とした。

¥abcblog
"| /usr/local/bin/w3m -dump http://hogehge/blog/mt/abc/mail-entry.cgi"

  • 同様にxyzblogのhome ditrectoryにも作成
  • そしてabcblogとxvzblogにメールを出した。

見事に成功した。
メールを受けると直ちに反映されるのもcronで10分毎に処理するよりサーバに負荷も掛からず好都合。
それに、この方法だと何人分でも簡単に作れる。


mail-entry.cgi(失敗の巻き)・・・(Movabletype)

Blogに携帯電話からのメールでも投稿できるMoblogというのが流行っているそうだ。
そこで我が家のサーバにもmail-entry.cgiというのを入れてMoblogを行うことにした。
我が家のサーバではMovabletype関連ファイルを$Documentroot/blog/mtに置いている。
以下はその手順です。
(1) Blog専用にabcblogとxyzblogのアカウントを作りメールを受けられるようにする。
(2) 2人でBlogのページを設けているので、mtディレクトリー内でmkdir abcとmkdir xyzとして2つのディレクトリーを作りこの中にそれぞれmail-entry.cgi関連のファイルを入れた。
(3) そして、それぞれのmail-entry-config.cgiをBrowserから起動して環境設定を行った。
(4) メールをabcblog宛てに出し/hogehoge/blog/mt/abc/mail-entry.cgiを呼び出す。
Blogにうまく反映できた。 画像添付もちゃんと処理されて現れる。

(5) 次にmail-entry.cgiはcurrent directoryが自分自身のディレクリーでないとうまく起動しないとネットの解説記事に書かれていたので、suしてrootになりメールをabc宛てに出した後にabcディレクトリーに移りmail-entry.cgiを起動してBlogに反映されることを確認した。

ここまではうまく行ったので、いよいよcrontabに登録して自動化する。

0,10,20,30,40,50  * * * *  cd /$Documentroot/blog/mt/abc ;
/$Documentroot/blog/mt/abc/mail-entry.cgi 1>/dev/null 2>/dev/null
5,15,25,35,45,55  * * * *  cd /$Documentroot/blog/mt/xyz ;
/$Documentroot/blog/mt/xyz/mail-entry.cgi 1>/dev/null 2>/dev/null

あれー、メールを出してcronが動いても「メールがありません。」といわれる。
何度やっても同じだ。
調べたら、どうもmail-entry.cgiがメールを拾えていないようだ。
悪戦苦闘したが、手動なら動くがcronで動かない理由が分からない。


2004.12.15

Sendmail・・・(mail)

FreeBSDはDefaultでsendmailがインストールされる。
もう今時はsendmailより新しいpostfixとかqmailなどを使うべきなのかもしれにが、体に染み付いた習慣から抜けられなくて、sendmailをそのまま使うことになっている。
以前はsendmailの設定ファイルであるsendmail.cfを作るのにxxxxx.defなどという設定ファイルの予備ファイルのようなものを作って、sendmail.cf作成用専用コンパイラーでsendmail.cfを作っていた。 が、最近はfreebsd2.mc等と名付けられたmc fileのサンプルがあるので、これをコピーして適当な名前で例えばmycomputer.mcなどと変えて、編集の後makeすればmycomuter.cfが出来上がるのでsendmail.cfに名前を変えて出来あがりとなる。
しかし、大概は最初からあるsendmai.cfで十分で、次に述べるaccessとlocal-host-namesのファイルと他のサーバからの中継を許す場合のみrelay-domainsのファイルを作る。

1.access

    cyberspammer.com         550 We don't accept mail from spammers
another.source.of.spam   REJECT
okay.cyberspammer.com    OK
myhome.mydomain.com   RELAY
10.77.14.                RELAY

  のように記述しrootになって

 su-2.05b# makemap hash /etc/mail/access < /etc/mail/access

 とすると、access.dbが出来上がる。

2. local-host-names

  本来のホスト名と別名でも受けたい場合は次のように2つ書いて置く。

  myhome.mydomai.com
  another.name.co.jp

3. relay-domains

リレーを許してあげるドメインがあれば、relay-domainsの名前のファイルを
作り許可するドメイン名を列記しておけばよい。
最後に忘れてならないのは/etc/rc.confに
sendmail_enable=”YES”
の一行を追加し、rebootすれば立ち上がる。


PerlとTool・・・(Movabletype)

1. perlについて

perlはFreeBSDをインストールすると勝手にperl-5.6.1が入ってしまうが、後にGraphic関係のライブラリーやperlのtoolkitなどを入れるとperl-5.8.3などが入って2つのperlが共存することになり、煩わしい。
以前は呼び出し位置を変えて、/usr/bin/perlと/usr/local/binで使い分けていたが、今回はperl-5.6.1をpackage deleteして全てperl-5.8.5で行くことにした。 portsで入れた。
対応するツール類もperl-5.8.5になってきているので不充は無い。

2.追加ソフト、ライブラリー

(1) ImageMagick
   これはあっさりpackageで入れておいた。
(2) GD module
   仲間内で使っている写真アルバムでのサムネイル作成ソフトが
   使っているのでportsでp5-GDを入れた。
(3) 携帯からもBlogを書き込める便利なmail-entry.cgiには必要
   なのでp5-MIME-Toolsもportsで入れる。
(4) p5-Image-Size
   packageのgraphicsから入れる。
(5) ja-p5-Jcode, ja-nkf, ja-p5-jcode.pl
   packageのjapaneseから入れる。
(6) HTML::Entities
  /usr/ports/www/p5-HTML-Parserから入れる。
(7) Crypt::DSA
  /usr/ports/security/p5-Crypt-DSAから入れる。
(8) XML::Atom
  /usr/ports/textproc/p5-XML-Atomから入れる。


Majordomo・・・(mail)

1. インストール

Majordomoのインストールは今回portsでmake installで一発で入れた。
手抜きだが便利です。 

# cd /usr/ports/mail/majordomo
# make install clean

手動だとMajordomoが使うユーザ名やグループ名を登録したり、sendmail.cfで指定されているsendmailの位置が/usr/sbin/senmailで無く手直しが必要など、結構手間取るのだが、portsだと、環境に合わせてmakeしてくれるので手間がかからない。
問題は、sequencerを使ってメールのタイトルに[abcd: 0123]のようなシーケンスを振ろうとすると返信で[abcd:0124]Re:[abcd:0123]・・・・ のようにシーケンス番号が重なってしまうことである。
これはsequencerの153行目あたりを自称nob & tamotsuさんがアドバイスしてくれているように以下の修正をして重なりを防止する。
ただし、outlook expressはメールヘッダーがMIMEの規定に違反していて、重なりを防止できない。
が、昨日outlookで実験したらOKだった。 新しい版数では対処できているのか?

while (<STDIN>) {
+ # by nob & tamotsu
+ if (/^Subject:/) {
+ s/[rR][eE]:.*[([].*d+[)]]/Re:/;
+ s/[rR][eE]:s*[rR][eE]:/Re:/g;
+ s/[rR][eE]:s*[rR][eE]:/Re:/g;
+ }
+
print IN $_;
}

あとは、/usr/local/majordomo/listsにtouch test(ML list名)を作り、touch test.seqでシーケンス番号のためのファイルを作る。 そして

#chown majordom *
#chgrp majordom *

としてグループ、オーナーともにmajordomにしておく。
また、必要ならtest.infoとtest.intoも説明文のファイルとして適当な内容のファイルも作る。

2. aliasesについて

インストールが終わるとメールのaliasesにEntryを追加してnewaliasesコマンドで修正を 反映させる。  以下はaliasesへの追加例。

owner-owner: nakamura
majordomo: "|/usr/local/majordomo/wrapper majordomo"
majordom: majordomo
majordomo-owner: nakamura
owner-majordomo: nakamura
test: "| /usr/local/majordomo/wrapper sequencer -l test -n -h
HOST名 test-going"       (上の行から連続して記述)
test-going::include:/usr/local/majordomo/lists/test
owner-test:nakamura
test-request:"|/usr/local/majordomo/wrapper request-answer test"
test-approval:owner-test
test-owner:owner-test

ところで、メールのタイトルにシーケンス番号を付けるsequencerのparameterなんて知らなくて人の真似をしてaliasesに書いていたが、今回調べたら下記のようになっていた。

-A moderate
-a: approve passwd
-d debug
-f: sender 指定
-h: ML Hostname 指定
-I: restrict_post
-l: Mailing List の名前
-m: mailer option
-M: max length
-n seq を使って番号管理をする
-N Archive の写しを作る + -n 機械
-p: precedence
-R purge Received
-r: Reply-To: を使う。引数に宛先を書く( host名 付)
: が付いているのは 後に更に引数を付けるもの。

(3) メーリングリストの作成


majordomo宛てに
subscribe test
end
の内容のメールを送り、testに登録する。
登録の手続きのメールが送られてくるので、その手順に従って作業(authorize)を進める。
/usr/local/majordomo/lists内に作られたtest.configを編集すれば、シーケンス番号の付け方、認証の仕方などが変えられる。