snagplaces on @wiki
phplistでメールマガジン構築実験
最終更新:
snagplaces
-
view
最終更新日時:2009年12月25日 (金) 10時38分33秒[編集]
はじめに
※現在phplistは削除したので、今後更新することはないと思います。
phplistは文字通りPHPで書かれたメールマガジン発行スクリプトです。
データの保存にMySQLを使用しているため、わりかしセキュアなシステムだろうなと思います。
phplistは文字通りPHPで書かれたメールマガジン発行スクリプトです。
データの保存にMySQLを使用しているため、わりかしセキュアなシステムだろうなと思います。
注意事項
- Apache・Postfix・Dovecotが構築済み
参考サイト
MySQLの設定
テストサーバにはMySQLがインストール済みであったものの、設定が何一つされていなかったのでまずはそこから行います。
補足:rootパスワードを忘れた場合はmySQLのrootのパスワード初期化 [Pen-test.jpn.org]>>http://pen-test.jpn.org/init:mysqlnorootnopasuwa%E3%83%BCdoに初期化の方法が載ってます。
補足:rootパスワードを忘れた場合はmySQLのrootのパスワード初期化 [Pen-test.jpn.org]>>http://pen-test.jpn.org/init:mysqlnorootnopasuwa%E3%83%BCdoに初期化の方法が載ってます。
PHPとMySQLとのひも付け
これをしておかないと「Fatal Error: Mysql is not supported in your PHP, recompile and try again.」といったエラーが出ます。
原因はphp5が基本だとmysqlを内包しない設定になっているせいで、これを解決するにはphp-mysqlを導入する、もしくは--without-mysqlオプションを外したうえでphpをコンパイルするかになります。
phpのリコンパイルは面倒なので、ここではphp-mysqlを導入する方法で行います。
原因はphp5が基本だとmysqlを内包しない設定になっているせいで、これを解決するにはphp-mysqlを導入する、もしくは--without-mysqlオプションを外したうえでphpをコンパイルするかになります。
phpのリコンパイルは面倒なので、ここではphp-mysqlを導入する方法で行います。
# yum install php-mysql # service httpd restart
my.cnfの設定
# vi /etc/my.cnf 【8行目あたり追記】文字コードをUTF-8にする default-character-set = utf8 【14行目あたり追記】MySQLクライアントの文字コードをUTF-8にする [mysql] default-character-set = utf8
MySQLの起動
# service mysqld start
MySQLを自動起動に設定
# chkconfig mysqld on
[▲上へ]
MySQL初期設定
以前は初期設定時にちまちまと不要ユーザやデータベースを削除していたのですが、MySQL5では対話形式での初期設定ツールが付属していました。
もしかしたら昔のバージョンでもあったかもしれませんが。
もしかしたら昔のバージョンでもあったかもしれませんが。
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): 【Enter】 OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] 【Enter】 New password: 【MySQLのrootログインのためのパスワードを入力】 Re-enter new password: 【確認のため同一パスワードを入力】 Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] 【Enter、匿名ユーザの削除】 ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] 【Enter、リモートからのrootログイン禁止】 ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] 【Enter、testデータベースの削除】 - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] 【Enter、MySQLテーブルの更新】 ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL!
データベースの確認
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 3 rows in set (0.00 sec)
ユーザの確認
mysql> select user,host from user; +------+-----------+ | user | host | +------+-----------+ | root | localhost | +------+-----------+ 1 row in set (0.00 sec)
[▲上へ]
phplist用データベースとユーザの作成
データベースの作成
# mysql -uroot -p Enter password: mysql> use mysql; mysql> create database phplist character set 'utf8'; ※「character set」のところは別になくていいと思う
phplist用ユーザ(phplist)の作成
mysql> grant all privileges on phplist.* to phplist@localhost identified by 'パスワード';
[▲上へ]
phplistの導入
phplistのダウンロード
# wget http://www.phplist.jp/mydownloads+visit.cid+1+lid+3.htm
ダウンロードしたファイルの解凍
# unzip phplist-2.10.4jp.zip
日本語関連ファイルがEUCなのでUTF-8に変換
日本語化するべき項目は以下の6つ(ディレクトリ含む)。
rubyのコマンドで変換する方法でやっていますがあまり信用できません(結局手動で変換した)。
しかも同じコマンドを2回やるとファイルを壊してしまいます。
rubyのコマンドで変換する方法でやっていますがあまり信用できません(結局手動で変換した)。
しかも同じコマンドを2回やるとファイルを壊してしまいます。
# cd /home/monitor/public_html/phplist-2.10.4jp/public_html/lists/ # ruby -rnkf -i -ne 'print NKF.nkf("-E -w", $_)' \ texts/japanese.inc \ admin/help/ja/* \ admin/info/ja/* \ admin/lan/ja/* \ admin/phpmailer/language/phpmailer.lang-ja.php \ admin/defaultconfig.inc
各設定ファイル編集
# vi admin/mysql.inc 【45行目あたり追記】 mysql_query("SET NAMES 'utf8'", $db);
# vi texts/japanese.inc 【5行目あたり変更】 $strCharSet = 'UTF-8';
# vi admin/send_core.php 【946行目あたり変更】 value="'.htmlentities($subject,ENT_QUOTES,'EUC-JP').'" size=40></td></tr> 【952行目あたり変更】 value="'.htmlentities($from,ENT_QUOTES,'EUC-JP').'" size=40></td></tr>
# vi admin/phpmailer/class.phpmailer.php 【36行目あたり変更】 var $CharSet = "iso-2022-jp"; 【49行目あたり変更】 var $Encoding = "7bit"; 【422行目あたり追記】 $body = mb_convert_encoding($body, $this->CharSet); 【1142行目あたり追記】 $str = mb_encode_mimeheader($str, $this->CharSet, "B");
# vi admin/class.phplistmailer.php 【24行目あたり変更】 parent::SetLanguage('ja','phpmailer/language/');
# vi admin/structure.php 【69行目あたり変更】MySQLの1M制限回避(らしい "name" => array("varchar(50) not null","Name of Dataitem"),
# vi config/config.php 【25行目あたり変更】MySQLで設定したDB名 $database_name = "phplist"; 【28行目あたり変更】MySQLで設定したphplist用のユーザ名 $database_user = "phplist"; 【31行目あたり変更】MySQLで設定したphplistユーザのパスワード $database_password = 'パスワード'; ※以下の項目は本稼働時に変更する 【191行目あたり修正】テストモードを終了 define ("TEST",0);
phpmailerを適切な場所に移動
# cd /home/monitor/public_html/phplist-2.10.4jp/public_html # cp -r * /home/monitor/public_html
phplistのWeb設定
- 「http://ドメイン/lists/admin」にアクセス
- 「データベースの初期化」をクリック
- 「phplistセットアップ」をクリック
- 「admin/phplist」でログイン
- 「システム機能」→「セットアップ」をクリック
- 未解決な項目がでるので、それぞれ変更しておく
必要な作業はこれくらい。
機能が豊富でできることは多いのですが、グループをlistと称したりと一部独特な表現があったり、設定時の手間がかかることを考えると、これもまたmailman同様にクセがありました。
ちなみに、Wordpressのプラグインでメールマガジンを実現するSubscribe2というものがあって、これもテスト環境に構築してはみたのですが、送信などは容易ではあるものの、登録したメールアドレスのグループ化は記事カテゴリに任せるという方式で、あくまでユーザに希望の記事を登録させるという形式であったため自分の用途には合わず。
個人的には指定ページにアクセスではなく指定アドレスに送信したらメールマガジンに登録され、件名本文から自動的に区分されるようなものがほしかったのですが…なかなかみつからんもんですね。
ちなみに、Wordpressのプラグインでメールマガジンを実現するSubscribe2というものがあって、これもテスト環境に構築してはみたのですが、送信などは容易ではあるものの、登録したメールアドレスのグループ化は記事カテゴリに任せるという方式で、あくまでユーザに希望の記事を登録させるという形式であったため自分の用途には合わず。
個人的には指定ページにアクセスではなく指定アドレスに送信したらメールマガジンに登録され、件名本文から自動的に区分されるようなものがほしかったのですが…なかなかみつからんもんですね。
[▲上へ]