お手軽なPHPベースの?WebMailシステム
IMAP関連
- IMAPフォルダの日本語対応 - Ilohamailでは独自のUTF7-IMAP実装をしているため、他のメー...
ビルド
MySQLがデフォでビルドされる。 貧弱なサーバだとinodeが足りなくなるのでportsで-D WITHOUT_MYSQLくっつけてmake installすると良いがカレンダーやブックマークが使えなくなる。少ない設定ですんなり動く便利なWebmailシステム。
落とし穴
どうやら添付ファイル周りが怪しく、送信は出来るが受信して開こうとすると、ことごとくファイルが壊れる。LZHでもPDFでも微妙に壊されるのでタチが悪い。ここを参考にファイルの一部を書き換えたら成功したかも。mbstring周りが入っていないとPHPでエラーが出るので、ports経由でlang/PHP4-extensionsをmake installする必要がある。もちろんモジュールの選択画面でMBSTRINGを必ず選択すること。apache2でも無事動作してるっぽい。
やっぱりMySQL導入
やっぱりMySQLを使った個人情報管理やカレンダー機能を使いたいので入れてみる。 特別なビルドはしないので、アーカイブ内のMySQLディレクトリをまるごと
/usr/local/share/ilohamail/MySQL
にコピーする。恐らく存在しないので当然事前にディレクトリを掘っておく。
データベース登録
ilohamailのインストール時に表示された方法でDBを作成。
Using the MySQL back-end is also recommended.
1. Create database user who has rights on webmail database manipulation
by following "sample" mysql commands:
$ mysql -u root -p
mysql> use mysql;
mysql> grant select,insert,update,delete,index,
-> alter,create,drop,references, lock tables,
-> create temporary tables on webmail.* to webmail@localhost
-> identified by 'password';
mysql> flush privileges;
passwordは当たり前だがpasswordと入れてはいけない。
2. Create a MySQL database.
$ mysqladmin create webmail
となってるけど
$ mysqladmin create webmail -p
とする。
3. Create tables.
$ mysql webmail < /usr/local/share/ilohamail/MySQL/sql -p
も同様にケツに-pをつける。
4. Configure /usr/local/www/ilohamail/conf/db_conf.php.
db_conf.phpの編集は
$DB_HOST="localhost"; $DB_USER="webmail"; $DB_PASSWORD="入れたパスワード";
とするだけ。
5. Set value of $backend in /usr/local/www/ilohamail/conf/conf.inc from "FS" to "DB".
conf.incは
$backend = "DB";
とする。
以上で完了。
ファイルサイズ制限
添付ファイルの制限対策はphp.iniを編集。FreeBSDの場合/usr/local/etc/php.ini
post_max_size=8M upload_max_filesize=2M memory_limit = 8M
をそれぞれ適当なサイズに変更。
QPOPPERとの相性
一覧でメールを削除するとエラーが出る。 パーミッションを弄ると直るとか本家のMLでは言われているが、どうにもならない。 最新版のソースを見てみるとエラーの出るfputs関数の箇所を@fputsに置き換えている。
PHPでは関数の前に@を付けるとエラーを無視してくれるらしい。
[個人情報]の挙動
[個人情報]で署名を設定しても反映されない。 ソースを見てもおかしい所はなく、CVSから拾ってきた最新版のソースでも署名の挿入に関しては現状と変わりないようだ。
MySQLを使っているので挙動を覗いてみる。
# mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is xxx to server version: Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> connect webmail; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Connection id: xxx Current database: webmail mysql> show tables;
| Tables_in_webmail |
| bookmarks |
| cache |
| calendar |
| colors |
| contacts |
| identities |
| prefs |
| sessions |
| user_log |
| users |
10 rows in set (0.00 sec)
テーブルは作成できている。
mysql> select * from identities;
とすると登録者の名前やe-mailの一覧が出てくる。 署名も入力したものが表示されている。
mysql> select * from prefs;
| id | colorize_quotes | detect_links | view_max | show_size | save_sent | sent_box_name | delete_trash | trash_name | rootdir | user_name | email_address | signature1 | show_sig1 | lang | charset | sort_field | sort_order | list_folders | view_inside | timezone | html_in_frame | show_images_inline | showContacts | showCC | closeAfterSend | showNav | folderlistWidth | hideUnsubscribed | compose_inside | show_quota | showNumUnread | refresh_folderlist | folderlist_interval | radar_interval | theme | main_toolbar | alt_identities | main_cols | clock_system | nav_no_flag |
とやるとドバっと出てくるので絞る。
mysql> select signature1 from prefs where user_name="[個人情報]で設定した名前";
としたが空っぽ。
WebでIlohamailにログインして[個人情報]で[変更]を選択し、デフォルトにチェックを入れて変更ボタンを押す。
mysql> select signature1 from prefs where user_name="[個人情報]で設定した名前";
| signature1 |
| 作成した署名 |
1 row in set (0.00 sec)
で反映された。 これが消えるのが挿入されない理由と思われる。 試しに[設定]の[一般]に戻り、[いますぐ反映]ボタンを押してみる。
再び
mysql> select signature1 from prefs where user_name="[個人情報]で設定した名前";
とすると消えた。
どうやら[いますぐ反映]は押したら[個人情報]のデフォルトを再設定する必要があるらしい。
個人情報のデフォルトを残すQuick Hack
ソースを見るとどうやらprefs.phpで情報を読み込む時にsignature1に署名データを入れていないのが原因らしい。 というわけでまずilohamail/lang/jp/prefs.incを以下のように変更する。
--- prefs.inc.org Thu Apr 6 18:07:10 2006 +++ prefs.inc Thu Apr 6 18:07:36 2006 @@ -24,6 +24,8 @@ $prefsStrings["0.2"] = "Email: "; $prefsStrings["0.3"] = "「%s」ページで設定できます。"; $prefsStrings["0.4"] = "未指定"; +$prefsStrings["0.5"] = "署名: "; +$prefsStrings["0.6"] = "設定済み"; $prefsStrings["1.0"] = "言語"; $prefsStrings["1.1"] = "インターフェース言語: "; $prefsStrings["1.2"] = "標準文字コード: ";
これで署名のチェック項目用メッセージが追加される。但し、他言語も対応する場合はlangの他のファイルも単語を選んで同じように変更する。
そしてilohamail/source/prefs.phpを以下のように変更。
※wikiのphpのコードを狙ってエロリンクを突っ込むbotが居るようなので画像に変更
これで[すぐに反映]ボタンを押してもデフォルトが消えなくなった。
とりあえずの日本語対応パッチ
バックアップ代わりにパッチを置いておく。