phpListはオープンソースのメール配信プログラムです。非常に高機能で、メールマガジンの発行や、組織内での一斉配信などに利用できます。今回はそのphpListをさくらインターネットのスタンダードプランに設置する方法です。設置にあたっての条件は下記のとおりです。

  • phpList 3.2.4(2016年5月1日現在の最新版)を使用する
  • さくらインターネットスタンダード以上の契約である
  • さくらインターネットのサーバコントロールパネルが利用できる
  • 送信先はみんなUTF-8のメールが受け取れる(やけに古いメールクライアントじゃない)
  • phpのバージョンは5.5(php5.6では制限があります)
  • sshでログインして操作ができることスキルがある
  • 手元でtar.gzの解凍ができるアーカイバがある

あとはFTPとかviとかその他もろもろ。







データベースの準備

phpListの前に、さくらインターネットのサーバコントロールパネルからphpListで使用するデータベースを作成します。
データベースの設定をクリックし、データベースの新規作成をクリックしてください。MySQLのバージョンは5.5のままでOKです。データベース名の前半部分はID固定なので、後半部分だけ自由に命名できます。今回は説明の都合上、phplistdbと入れておきます。文字コードはUTF-8を選択し、データベースを作成するクリックしてください。
この後すぐに使いますので、下記の情報をどこかに控えておいてください。

データベースサーバ(mysql○○○.db.sakura.ne.jp)
データベースユーザ名(初期アカウント名固定)
接続パスワード(ご自身で設定したもの)
データベース名(初期アカウント名_phplistdb)

メールアドレスの準備

phpListでは、幾つかのメールアドレスが必要になります。管理がしやすいように役割を分けて作成されることをおすすめします。今回は最低限必要となるであろう3つのアドレスについて事前に準備してください。

メール配信元となるメールアドレス

メールを配信する際に、配信元となるメールアドレスです。メールマガジンの顔となるアドレスですので、魂を込めて作成してください。今回は作成例として、下記を使用します。

magazine@あなたのドメイン.com

バウンスを受け取るメールアドレス

バウンスを受信するためのメールアドレスです。管理用ですので、管理者がわかりやすいメールアドレスであればよいと思います。今回は作成例として、下記を使用します。

bounces@あなたのドメイン.com

メール配信プロセスの開始と完了を受け取るメールアドレス

phpListは、メール配信開始と完了の通知をメールで受け取ることができます。今回はcronでコマンドを実行して配信しますので、通知を受け取れるようにしておくほうがよいと思います。作成例として下記のアドレスを使用します。

processqueue@あなたのドメイン.com

phpListの入手

では改めまして、phpListのパッケージ一式をダウンロードします。phpListは以下のリンク先からダウンロードし、わかりやすいところに保存してください。手元のOSがなんであれ、zip版でよいと思います。

https://www.phplist.org/download-phplist/

保存できたら、手元で解凍します。解凍するとphplist-3.2.4というフォルダが出現するはずです。フォルダの中には約3700個のファイルやフォルダがあるはずですが、phpListの本体は、listsフォルダ以下のフォルダとファイルのみです。最終的に、listsフォルダをWeb上にアップロードします。間違ってもphplist-3.2.4をまるごとアップロードしないように気をつけてください。ちなみに、FTPでアップロードすると日が暮れます。sshでログインして作業することに慣れてらっしゃる方は、手元で設定ファイルやちょっとしたスクリプトの改造など、全て済ませてから再圧縮してFTPでアップロード、サーバー上で展開のほうが断然早いです。「ssh?なんじゃそれ?」の方は、勉強したりターミナルソフトの設定したりしているうちにアップロードが終わると思うので、圧縮せずにそのままFTPでアップロードしてください。

設定ファイル(config.php)の設定

\phplist-3.2.4\public_html\lists\configと進んでいくと、config.phpというファイルがあります。これが設定ファイルの本体なので、これを編集していきます。できればUTP8対応のテキストエディタで編集してください。サクラエディタとか、フリーで高機能なエディタがありますので、今後のためにもそういったエディタを使用されることをおすすめします。あと、編集を始める前に、初期状態のconfig.phpをconfig.php.defaultとかに名前を変えて保存しておいてください。
以下、初期状態のconfig.phpをそのまま引用しています。config.phpの冒頭にもある通り、デフォルトのconfig.phpは必要最小限の設定項目しかありません。それを編集するとともに、すこしだけ追加しています。内容は下記のとおりですが、面倒ならそのままコピペして必要事項を変更して保存すれば出来上がりです。

<?php
# 【追加】
# 使用する言語の指定
$language_module = "japanese.inc";

/*

* ==============================================================================================================
* 
* 
* The minimum requirements to get phpList working are in this file. 
* If you are interested in tweaking more options, check out the config_extended.php file
* or visit http://resources.phplist.com/system/config
* 
* ** NOTE: To use options from config_extended.php, you need to copy them to this file **
* 
==============================================================================================================

*/

# what is your Mysql database server hostname
# データベースサーバーのアドレスを指定する
$database_host = 'mysql○○○.db.sakura.ne.jp';

# what is the name of the database we are using
# 使用するデータベース名を指定する
$database_name = '初期アカウント名_phplistdb';

# what user has access to this database
# データベースユーザー名
$database_user = '初期アカウント名固定';

# and what is the password to login to control the database
# データベースパスワード
$database_password = 'ご自身で設定したもの';

# if you have an SMTP server, set it here. Otherwise it will use the normal php mail() function
## if your SMTP server is called "smtp.mydomain.com" you enter this below like this:
##
##     define("PHPMAILERHOST",'smtp.mydomain.com');
# メール送信に使用するサーバー
# 共用SSLを利用し、かつ、さくらインターネットのphp5.6を使用する場合は、
# 独自ドメインのメールサーバーが利用できないので、
# 初期アカウント名.sakura.ne.jpを指定してください。
# php5.5だと独自ドメインも問題なく利用できます。

define('PHPMAILERHOST', 'あなたのドメイン.com');


# 【追加】
# メール送信サーバーポート
define('PHPMAILERPORT',587);

# 【追加】
# メール送信サーバーで使用するユーザー名
$phpmailer_smtpuser = 'ユーザー名@あなたのドメイン.com';

# 【追加】
# メール送信サーバーで使用するパスワード
$phpmailer_smtppassword = 'ご自身で設定したもの';


# if test is true (not 0) it will not actually send ANY messages, but display what it would have sent
# this is here, to make sure you edited the config file and mails are not sent "accidentally"
# on unmanaged systems
# テストモード解除(1=テストモード 0=本番モード)

define('TEST', 0);

/*

==============================================================================================================
* 
* Settings for handling bounces
* 
* This section is OPTIONAL, and not necessary to send out mailings, but it is highly recommended to correctly 
* set up bounce processing. Without processing of bounces your system will end up sending large amounts of
* unnecessary messages, which overloads your own server, the receiving servers and internet traffic as a whole
* 
==============================================================================================================

*/

# 以下、バウンスの設定内容ですが、バウンスの管理は手動になります。
# さくらインターネットのphpにはIMAPモジュールが含まれていないので、
# バウンスをphpListで直接管理することはできません。

# Message envelope.
#
# This is the address that most bounces will be delivered to
# Your should make this an address that no PERSON reads
# but a mailbox that phpList can empty every so often, to process the bounces

# バウンスを受信するメールアドレス
$message_envelope = 'bounces@あなたのドメイン.com';

# Handling bounces. Check README.bounces for more info
# This can be 'pop' or 'mbox'
# ここはデフォルトのまま
$bounce_protocol = 'pop';

# set this to 0, if you set up a cron to download bounces regularly by using the
# commandline option. If this is 0, users cannot run the page from the web
# frontend. Read README.commandline to find out how to set it up on the
# commandline
# バウンスはcronで自動取得しないので、ここはデフォルトのままでいいです。
define('MANUALLY_PROCESS_BOUNCES', 1);

# when the protocol is pop, specify these three
$bounce_mailbox_host = 'あなたのドメイン.com';
$bounce_mailbox_user = 'bounces@あなたのドメイン.com';
$bounce_mailbox_password = 'bounces@あなたのドメイン.comのパスワード';

# the "port" is the remote port of the connection to retrieve the emails
# the default should be fine but if it doesn't work, you can try the second
# one. To do that, add a # before the first line and take off the one before the
# second line
# ここはデフォルトのまま
$bounce_mailbox_port = '110/pop3/notls';
#$bounce_mailbox_port = "110/pop3";

# it's getting more common to have secure connections, in which case you probably want to use
#$bounce_mailbox_port = "995/pop3/ssl/novalidate-cert";

# when the protocol is mbox specify this one
# it needs to be a local file in mbox format, accessible to your webserver user
# 今回はpopで設定していて、mbox形式は使わないので放っておいていいです。
$bounce_mailbox = '/var/mail/listbounces';

# set this to 0 if you want to keep your messages in the mailbox. this is potentially
# a problem, because bounces will be counted multiple times, so only do this if you are
# testing things.
# 今回はpopで設定していて、mbox形式は使わないので放っておいていいです。
$bounce_mailbox_purge = 1;

# set this to 0 if you want to keep unprocessed messages in the mailbox. Unprocessed
# messages are messages that could not be matched with a user in the system
# messages are still downloaded into phpList, so it is safe to delete them from
# the mailbox and view them in phpList
# 今回はpopで設定していて、mbox形式は使わないので放っておいていいです。
$bounce_mailbox_purge_unprocessed = 1;

# how many bounces in a row need to have occurred for a user to be marked unconfirmed
# 何回エラーが帰ってきたらそのアドレスを未承認にするかの設定です。
# 5回くらいが順当なので、ここはデフォルトのままでいいです。
$bounce_unsubscribe_threshold = 5;

# choose the encryption method for password
# check the extended config for more info
# in most cases, it is fine to leave this as it is
# ここはデフォルトのままでいいです。
define('ENCRYPTION_ALGO', 'sha256');

# 【追加】
# 管理画面のデフォルトの言語(翻訳はあまり進んでいません)
$default_system_language = 'ja';

# 【追加】
# 添付ファイルを使用するか(0=使用しない 1=使用する)
define("ALLOW_ATTACHMENTS",0);

# 【追加】
# 送信の方法(0=cronやリモートキューで送信 1=手動で送信)
# 今回は最終的にcronで送信する予定なので、0を設定しています
define ("MANUALLY_PROCESS_QUEUE",0);

# 【メール送信の設定】
# cronによるメール送信を行う上の設定です。
# さくらインターネットでは、15分間で250通という制限があるので、
# 制限内に収まるように設定していきます。
# 下の設定では、870秒の間に、メールを1通ずつ、1秒間隔で、200通送ります。
# さくらインターネットの制限である15分(900秒)に250通という制限をクリアし、
# 1秒ずつ間隔を空けることで過度な負荷がかからないようにしています。

# 【追加】
# 指定時間内に200通のメールを送る。
define("MAILQUEUE_BATCH_SIZE",200);

# 【追加】
# メールを送信する時間(15分x60秒=900秒ですが30秒の余裕をみています)
define("MAILQUEUE_BATCH_PERIOD",870);

# 【追加】
# メールを送信する間隔(1秒に1通送る設定)
define('MAILQUEUE_THROTTLE',1);

# 【追加】
# デフォルトではcronによる送信の詳細をメールで送ってくれます。
# 安定的に送信できていることを確認するまでは設定しなくてもいいですが、
# 長時間にわたって送信する場合、15分おきにメールが鳴りまくるので、
# 邪魔になるようなら「送らない」設定を追加します。
define('SEND_QUEUE_PROCESSING_REPORT','0');

ここでphp5.6で運用されている方にご注意です。php5.6では、どういうわけかSSLで独自ドメインのメールサーバーが使えません。phpListにSSL(https)で接続していると、送信し失敗しますので、初期ドメインでメールサーバーを指定する必要があります。どうしても独自ドメインのメールサーバー名から送信する必要がある場合は、phpのバージョンを5.5にするか、phpListにhttpで接続するようにしてください。以前これでかなりハマったので、ご注意です。
バウンスの管理についてですが、phpをIMAPを有効にして独自でインストールすれば、バウンスをphpList上で管理することができます。しかし、完全にさくらインターネットのサポート対象外ですので、さくらインターネットに問い合わせても何も教えてもらえないと思います。どうしてもphpListでIMAPを使ってバウンスを管理したいという方は、ご自身で調べて独自にphpをインストールしてください。ちんぷんかんぷんの方は、絶対にやらないでください。

今回はここまで

まだまだ長くなるので、いったん記事を切ります。今後の予定は、次のとおりです。

  • 送信されるメールに挿入されるphpListのロゴの削除
  • listsフォルダの配置
  • phpListのセットアップ
  • cronを使った送信の方法

次回で最後まで終わる予定です。最後までお付き合いくださいませ。







Author Profile

midzuki
自習室マイタスの運営本部、ハシヅメアーキテック代表者。本業は建設業。自習室マイタスの内装デザインおよび施工はすべて本人が行っている。
何事も断らない性格から、とある学習塾の塾長を任されたり、講師を兼任したり、工事のついでにオフィス機器の導入や慣熟指導、研修会講師など、自分でお役に立てることならできうる限り対応してきた。オフィスの新築・改装の際にワンストップで事務所機能をすべて揃えられると喜んでいただいている。ちなみに塾講師としての専門分野は現国で、現国で満点を取らせる男。

【その他の特徴】
◆一級施工管理技士
◆二級建築士
◆ネットワークに繋がるデバイスならだいたいなんとかできる。
◆基本的に自前主義で自分できることなら何でも自分でやる。
◆とにかく機械が好きで、友人のリサイクル工場で一日楽しめる。
◆ご要望が多いので現国の短期集中セミナーやるかも。
◆趣味は料理とギターで、Facebookから自炊録の移行を計画中。
◆最近、頭髪のことを気にしている。
◆こちら側のどこからでも切れないタイプの人種。
◆極度の育メン