自宅のサーバにメール配信のOSS「PHPList」をインストールした時の手順

自宅のサーバにPHPListをインストールした時の手順をメモ代わりに記載します。
インストールする環境は下記の通り

	OS : CentOS 6.6 ( 64bit )

	PHPのバージョン : 5.3.3

	MySQL : 5.6.31

# 1.PHPのIMAPモジュールのインストール
`# yum -y install php-imap`

# 2.phpListの最新モジュールのインストール

phpListの最新版をダウンロードし、モジュールを展開。

	# wget http://prdownloads.sourceforge.net/phplist/phplist-3.2.5.tgz?download
	# tar xfz phplist-3.2.5.tgz
	# mv phplist-3.2.5 /var/www/phplist

# 3.HTTPサーバの設定
/etc/httpd/conf.d/phplist.conf ファイルを新規に作成し、下記の定義を追加

	Alias /phplist /var/www/phplist/public_html

定義を追加後、下記のコマンドでhttpサーバを再起動

	# /etc/init.d/httpd restart

# 4.phpListで使用するデータベースをMySQLに作成
phpMyAdminを利用して、phpListで作成するデータベースとユーザを作成する。

# 5.phpListをセットアップする
下記コマンドでbaunceメール受信用のユーザを追加

	# useradd bounces
	# passwd bounces 

/var/www/phplist-3.0.5/public_html/lists/config/config.php ファイルを編集

	...
	#下記の設定をファイルの先頭に追加
	$language_module = "japanese.inc";
	
	#データベースのプレフィックス
	$usertable_prefix = "phplist_";	
	
	# phplistのルートディレクトリ
	$pageroot = '/phplist/lists';

	# phpListの管理ルートディレクトリを設定する
	$adminpages = '/phplist/lists/admin';

	#下記の部分を変更
	$database_name = "mySQLのデータベース名";
	$database_user = "mySQLのユーザ";
	$database_password = 'mySQLのパスワード';


	# データベースで作成するテーブル名のプレフィックスを設定する

	#テストモードを０にする
	define ("TEST",0);

	...

	# バウンスメールの宛先アドレスを設定します。
	# $message_envelope = 'listbounces@yourdomain';
	$message_envelope = 'bounces@hogehoge.com';
	...
	# バウンスメールの取得先サーバー、ユーザ、パスワードを設定します。
	# $bounce_mailbox_host = 'localhost';
	# $bounce_mailbox_user = 'popuser';
	# $bounce_mailbox_password = 'password';
	$bounce_mailbox_host = 'localhost';
	$bounce_mailbox_user = 'bounces';
	$bounce_mailbox_password = 'bouncespass';
	...

	# 最後にデフォルト言語に日本語の設定を追加します。
	$default_system_language = 'ja';


/var/www/phplist-3.0.5/public_html/lists/admin/class.phplistmailer.php ファイルを編集

	function PHPlistMailer($messageid,$email,$inBlast = true,$exceptions = false) {
      ...
      // コンストラクタの最終行に言語を日本語に設定する。
      $this->SetLanguage('ja', dirname(__FILE__) . '/phpmailer/language/');
    }
    ...
    // MailSendを親クラス PHPMailer の定義に合わせる
    //function MailSend($header, $body) {
    protected function MailSend($header, $body) {
      // MailSendの先頭に文字列を変換するメソッド（関数）を呼ぶように追加する。
      $body = $this->body2ja($body);
      ...
    }
    ...
    // ---- ここから、最終行に追加する ---- 
    //  属性に言語コード情報を追加する
    public $language_code      = '';
    //  言語コードが日本語の場合は、文字コードを変換するメソッド body2ja 追加する
    public function body2ja($body) { 
        if($this->language_code=='ja') {
            $body = mb_convert_encoding($body, $this->CharSet);
        }
        return $body;
    }
    //  SetLanguage のオーバーライド
    function SetLanguage($langcode = 'en', $lang_path = 'language/') {
        // 言語コード情報を属性情報に設定する
        $this->language_code = $langcode;
        // 言語コード情報が日本語の場合は、文字コード、エンコード情報を上書きする
        if($langcode=='ja') {
            $this->CharSet           = "iso-2022-jp";
            $this->Encoding          = "7bit";
        }
        // 親のSetLanguageをコールする
        return parent::SetLanguage($langcode,$lang_path);
    }

    //  SendmailSend のオーバーライド
    protected function SendmailSend($header, $body) {
        // 先頭で文字列を変換するメソッド（関数）を呼ぶように追加する。
        $body = $this->body2ja($body);
        return parent::SendmailSend($header,$body);
    }
    //  SmtpSend のオーバーライド
    protected function SmtpSend($header, $body) {
        // 先頭で文字列を変換するメソッド（関数）を呼ぶように追加する。
        $body = $this->body2ja($body);
        return parent::SmtpSend($header,$body);
    }
    //  EncodeHeader のオーバーライド
    public function EncodeHeader($str, $position = 'text') {
        // 先頭で文字列を変換する処理を追加する。
        if($this->language_code=='ja') {
            $str = mb_encode_mimeheader($str, $this->CharSet, "B");
        }
        return parent::EncodeHeader($str,$position);
    }
    // ---- ここまで、最終行に追加する ---- 


# 6.phpListの管理画面からセットアップ

  http://サーバのIPアドレス/phplist/lists/admin/ へアクセスし、画面の内容に従ってセットアップを実施。
  
  以上