6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

自宅のサーバに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のパスワード';


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

#テストモードを0にする
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/ へアクセスし、画面の内容に従ってセットアップを実施。

以上

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?