inMotion ホスティングで phpList を使ってみた際のメモ(使い方)。
送信者用アドレス、管理者用アドレス、送信したメールが何らかの理由で戻ってきた(bounce back)場合の処理のためのアドレス等を用意しておく。
この例では以下の様なアドレスを用意して、それぞれ必要な箇所に設定する。
newsletter@mydomain.com(送信者用)
admin@mydomain.com(管理者用)
listbounces@mydomain.com(バウンス bounce back 用)
(注意)
まとまった量のメール(1時間に250以上)を送信するには、あからじめ AMP で「email limit exemption」のリクエストを行う必要がある。(Sending an Email Limit Exception Request in AMP)
Install phpList with Softaculous
この例では、「phplist」というディレクトリーにインストールする。
ディレクトリ:mydomain.com/phplist
Choose Protocol | 「http://」または「http://www.」を選択。(SSLサーティフィケートを設定してあれば、「https://」、「https://www.」を選択) |
Choose Domain | phpList をインストールするドメインをプルダウンから選択。 |
Install in directory | インストールするディレクトリ(相対パス)の指定(インストールするディレクトリはこの時点では、存在してはならない)。空白の場合、プライマリードメインのドキュメントルートにインストールされる。例:「http://mydomain/foo/」にインストールするには「foo」と指定。空白にしておくと「http://mydomain/phplist/」にインストールされる。 |
Database name | phpList 用に作成するデータベース名を指定。 |
Cron job settings | Cron job の設定。特に指定がなければそのままにしておく |
Site Name | phpList の呼び名(デフォルトは「phpList」) |
Tabel prefix | テーブル接頭辞の指定 (デフォルトは「pl_」) |
Administrator username | 管理者(admin user)の名前 |
Administrator password | 管理者のパスワード |
Real Name | 管理者の表示名(デフォルトは「Administrator」) |
Admin Email | 管理者の email アドレス(デフォルトは admin@ドメイン名) |
インストールが完了すると、以下のように表示される。
Congratulations, the software was installed successfully
phpList has been successfully installed at :
http://mydomain.com/phplist
Administrative URL : http://mydomain.com/phplist/admin
How to rate limit emails sent in phpList(送信するメール数の設定)
デフォルトでは、phpList はできるだけ多くの数のメールを短時間に送信するようになっているが、スパムの問題や共用サーバーでの制限(送信できるメールの上限)などがあるため設定を変更する必要がある。
共用サーバーでの1時間あたりに送信できるメールの量はドメインに付き250に制限されている。1時間に250以上のメールを送信するには別途リクエスト(「注意」を参照)が必要。
また、通常メールを1時間に「10通」送信している場合は、phpList には最大「240通」に設定しなければならない。以下の例では phpList での送信するメールの量を「5分間」に「17通」(1時間に204通)に設定する。
いろいろな設定が記述されているが、以下の2つのラインを探して編集する。
define("MAILQUEUE_BATCH_SIZE",0); define("MAILQUEUE_BATCH_PERIOD",3600);
これらを以下のように変更する。毎300秒に17通送信するように設定。
(# から始まるのはコメントで最初から記述されているもの)
# define the amount of emails you want to send per period. If 0, batch processing # is disabled and messages are sent out as fast as possible define("MAILQUEUE_BATCH_SIZE",17); # define the length of one batch processing period, in seconds (3600 is an hour) define("MAILQUEUE_BATCH_PERIOD",300);
400+ のユーザーにメールを送信する場合、以下の様な感じになる。
9:20 am にリストを送信開始
(17通が送信され、次の送信まで300秒待つ)
5分後(9:25 am), ブラウザはリロードされ、以下の様なメッセージが表示される。(次の17通のメッセージが送信された)
このように5分毎にブラウザはリロードされ、17通ずつメールが送信される。
メモ
メールの送信が終わるまでは、ブラウザを閉じてはならない。
ブラウザを閉じると、phpList はメールを送信できないので、その時点で送れれていないメールは送信されない。途中で閉じてしまった場合は、「phpList admin」にログインしてサイドバーの「process queue」のリンクをクリックして、メールの送信を再開させる。
「config.php」の以下の部分を変更する。デフォルトは「英語”english.inc”」
# select the language module to use # Look for <country>.inc files in the texts directory # to find your language # this is the language for the frontend pages. In the admin pages you can # choose your language by using the dropdown in the pages. $language_module = "english.inc";
ユーザーのページを日本語にするには以下のように変更(管理画面はドロップダウンから言語を選択)
$language_module = "japanese.inc";
言語ファイルは「phplist/texts」にある。また、英語以外の言語ファイルは phpList の最新のバージョンに追い付いていないのでアップデートする必要がある。
Complete phpList setup after Softaculous install
自動的に設定されている各項目のデフォルトを確認して、必要であれば変更することができる。
phpList はリストにユーザーのメールアドレス以外の項目(名前やアンケート等)も設定することができ、「属性(attributes)」と呼ばれている。以下は「姓(Last Name)」、「名(Fist Name)」という2つの属性を作成する例。
名前: 姓(Last Name)
タイプ: textline
デフォルト値: (なし:空白、何も入力しない)
表示順: 1
Is this attribute required?: チェックを入れる
名前: 名(Fist Name)
タイプ: textline
デフォルト値: (なし:空白、何も入力しない)
表示順: 2
Is this attribute required?: チェックを入れる
How to create a Mailing list within phpList
リスト名: | テストリスト(リストの名前を指定) |
Public list (listed on the frontend) | チェックを入れる |
表示順 | 0(リストを表示する順番を指定:整数値) |
リストの説明 | テスト用リスト(リストの説明を入力) |
phpList では、ユーザーが購読ページから登録する場合がほとんどだが、マニュアルでユーザーを登録することもできる。
以下の例ではマニュアルでユーザーをリストに追加し、それらのユーザーを「未確認(un-confirmed)」に設定することでユーザーは今後メールを受信したいかどうかを判断(決定)することができる。
ID | ID は自動的に一意に付与されるので変更しない。 |
---|---|
先ほど入力したメールアドレスが表示される。 | |
Is this user confirmed (1/0) | ユーザーがすでに購読を確認しているかどうか。( 0 = No and 1 = Yes) この例では「未確認(un-confirmed)」とするため、「0」を指定。 |
Send this user HTML emails | HTML 形式のメールを受信するには「1」を、テキスト形式の場合は「0」を指定。0 = No and 1 = Yes |
姓(Last Name) | 独自に設定した属性「姓(Last Name)」。適当な名前を指定。 |
名(Fist Name) | 独自に設定した属性「名(Fist Name)」。適当な名前を指定。 |
前述でマニュアルで追加したユーザは「未確認(un-confirmed)」に設定しているので、確認のメールを送りユーザが登録を確認(承諾)するまでは、ニュースレターなどのメールは送信されない。
phpList のバージョンが「3」以前には、このような場合の機能(resending confirmation request to unconfirmd users:未確認ユーザへの確認メールの再送信)があったが、バージョン3 以降ではなくなっているので、以下のリンクにあるようなハックしをしなければその機能は使えない。
No more reminder to subscribers available?
phpList v3.0.x Integration – Script Changes “phpList v3 Missing Reconcile Subscriber Options”
注意
このハックをしても、アップグレードなどした場合には、機能しなくなる可能性もあるし、思わぬ不具合が発生しないとも限らない。また、元のファイルは別名でコピーして保存などしておいたほうがよい。行うには自己責任で。不具合かは不明だが「ユーザの調整」をクリックしたら「Sorry, not implemented yet.」と表示され他には何も表示されなかったが、もう一度やり直したらちゃんと表示された。。。
試したバージョン:version 3.0.5
「lists/admin/reconcileusers.php」の以下の部分(471行目から)を変更。
<?php //削除 /* //削除 <!--form method="get"> //「!--」を削除 <table class="reconcileForm"><tr><td colspan="2"> <?php echo $GLOBALS['I18N']->get('To resend the request for confirmation to users who signed up and have not confirmed their subscription')?></td></tr> <tr><td><?php echo $GLOBALS['I18N']->get('Date they signed up after')?>:</td><td><?php echo $from->showInput("","",$fromval);?></td></tr> <tr><td><?php echo $GLOBALS['I18N']->get('Date they signed up before')?>:</td><td><?php echo $to->showInput("","",$toval);?></td></tr> <tr><td colspan="2"><?php echo $GLOBALS['I18N']->get('Text to prepend to email')?>:</td></tr> <tr><td colspan="2"><textarea name="prepend" rows="10" cols="60"> <?php echo $GLOBALS['I18N']->get(' Sorry to bother you: we are cleaning up our database and it appears that you have previously signed up to our mailinglists and not confirmed your subscription. We would like to give you the opportunity to re-confirm your subscription. The instructions on how to confirm are below. ')?> </textarea> </td></tr> </table> <input type="hidden" name="page" value="reconcileusers" /> <input type="hidden" name="option" value="resendconfirm" /> <input class="submit" type="submit" value="<?php echo $GLOBALS['I18N']->get('Click here')?>" /></form--> //「--」を削除 */ //削除 ?> //削除
コメントアウトの部分などを削除して以下のように変更。
<hr/> <!-- 追加 --> <form method="get"> <table class="reconcileForm"><tr><td colspan="2"> <?php echo $GLOBALS['I18N']->get('To resend the request for confirmation to users who signed up and have not confirmed their subscription')?></td></tr> <tr><td><?php echo $GLOBALS['I18N']->get('Date they signed up after')?>:</td><td><?php echo $from->showInput("","",$fromval);?></td></tr> <tr><td><?php echo $GLOBALS['I18N']->get('Date they signed up before')?>:</td><td><?php echo $to->showInput("","",$toval);?></td></tr> <tr><td colspan="2"><?php echo $GLOBALS['I18N']->get('Text to prepend to email')?>:</td></tr> <tr><td colspan="2"><textarea name="prepend" rows="10" cols="60"> <?php echo $GLOBALS['I18N']->get(' Sorry to bother you: we are cleaning up our database and it appears that you have previously signed up to our mailinglists and not confirmed your subscription. We would like to give you the opportunity to re-confirm your subscription. The instructions on how to confirm are below. ')?> </textarea> </td></tr> </table> <input type="hidden" name="page" value="reconcileusers" /> <input type="hidden" name="option" value="resendconfirm" /> <input class="submit" type="submit" value="<?php echo $GLOBALS['I18N']->get('Click here')?>" /></form>
上記の修正がうまく行けば、以下の方法で確認メールを送信することができる。
例えば、今日が12月2日であれば以下の様な指定をすれば、先ほどリストに追加した「未確認(un-confirmed)」に設定されているユーザに確認メールを送信できる。
次の期間の後に参加表明した日付: | 1 | December | 2013 |
---|---|
次の期間の前に参加表明した日付: | 3 | December | 2013 |
また、送信されるメッセージ(Text to prepend to email:)がデフォルトで英語の文が記述されているが、必要であれば変更して、「ここをクリック」をクリックする。
How to create a subscribe form for your phpList mailing list
この時の URL(例:http://mydomain.com/phplist/?p=subscribe&id=1)が購読ページの URL になる。
<script language="Javascript" type="text/javascript"> function checkform() { for (i=0;i<fieldstocheck.length;i++) { if (eval("document.subscribeform.elements['"+fieldstocheck[i]+"'].type") == "checkbox") { if (document.subscribeform.elements[fieldstocheck[i]].checked) { } else { alert("入力してください: "+fieldnames[i]); eval("document.subscribeform.elements['"+fieldstocheck[i]+"'].focus()"); return false; } } else { if (eval("document.subscribeform.elements['"+fieldstocheck[i]+"'].value") == "") { alert("入力してください: "+fieldnames[i]); eval("document.subscribeform.elements['"+fieldstocheck[i]+"'].focus()"); return false; } } } for (i=0;i<groupstocheck.length;i++) { if (!checkGroup(groupstocheck[i],groupnames[i])) { return false; } } if (! compareEmail()) { alert("入力した電子メールアドレスがマッチしません。"); return false; } return true; } var fieldstocheck = new Array(); var fieldnames = new Array(); function addFieldToCheck(value,name) { fieldstocheck[fieldstocheck.length] = value; fieldnames[fieldnames.length] = name; } var groupstocheck = new Array(); var groupnames = new Array(); function addGroupToCheck(value,name) { groupstocheck[groupstocheck.length] = value; groupnames[groupnames.length] = name; } function compareEmail() { return (document.subscribeform.elements["email"].value == document.subscribeform.elements["emailconfirm"].value); } function checkGroup(name,value) { option = -1; for (i=0;i<document.subscribeform.elements[name].length;i++) { if (document.subscribeform.elements[name][i].checked) { option = i; } } if (option == -1) { alert ("入力してください: "+value); return false; } return true; } </script> <form method="post" action="" name="subscribeform" ><table border=0> <tr><td><div class="required">電子メール</div></td> <td class="attributeinput"><input type=text name=email value="" size="40" /> <script language="Javascript" type="text/javascript">addFieldToCheck("email","電子メール");</script></td></tr> <tr><td><div class="required">Confirm your email address</div></td> <td class="attributeinput"><input type=text name=emailconfirm value="" size="40" /> <script language="Javascript" type="text/javascript">addFieldToCheck("emailconfirm","Confirm your email address");</script></td></tr><tr><td colspan="2"> <span class="attributeinput"><input type="checkbox" name="htmlemail" value="1" /></span> <span class="attributename">私はHTMLフォーマットで電子メールを受け取ります。</span></td></tr> </table><input type="hidden" name="list[4]" value="signup" /><input type="hidden" name="listname[4]" value="テストリスト"/><div style="display:none"><input type="text" name="VerificationCodeX" value="" size="20"></div><p><input type=submit name="subscribe" value="選択したメールマガジンの購読" onClick="return checkform();"></p> </form>
<form method="post" name="subscribeform" action="http://mydomain.com/phplist/?p=subscribe&id=1"> <div class="required">電子メール</div> <input type=text name=email value="" size="40" /> <script language="Javascript" type="text/javascript">addFieldToCheck("email","電子メール");</script> <div class="required">Confirm your email address</div> <input type=text name=emailconfirm value="" size="40" /> <script language="Javascript" type="text/javascript">addFieldToCheck("emailconfirm","Confirm your email address");</script> <span class="attributeinput"><input type="checkbox" name="htmlemail" value="1" /></span> <span class="attributename">私はHTMLフォーマットで電子メールを受け取ります。</span> <input type="hidden" name="list[4]" value="signup" /><input type="hidden" name="listname[4]" value="テストリスト"/><div style="display:none"><input type="text" name="VerificationCodeX" value="" size="20"></div><p><input type=submit name="subscribe" value="選択したメールマガジンの購読" onClick="return checkform();"></p> </form>
How to send a message to your phpList mailing list
メッセージ送信ページでメッセージを作成し、送信する。以下の様なタブがあるので順番に設定(入力)していき、最後の「Finish」で送信する。
「Send Test」に送信先を指定して「Send Test」をクリックするとテストメールが送信できる。但し、送信先に指定できるのはリストに掲載されているアドレスに限る。
何らかの理由(アドレスが間違っているなど)で戻ってきた(バウンス)メールは、以下の設定を行うことにより、指定したアドレスにそのエラーメッセージが送信され、バウンス処理を行うことができる。
# $message_envelope = 'listbounces@yourdomain';
$message_envelope = 'listbounces@mydomain.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 define ("MANUALLY_PROCESS_BOUNCES",1); # when the protocol is pop, specify these three $bounce_mailbox_host = 'localhost'; $bounce_mailbox_user = 'listbounces@mydomain.com'; //実際のアドレスを指定 $bounce_mailbox_password = 'MyPa$$W0rd'; //実際のパスワードを指定
処理されたメッセージはmailboxから削除されるでしょう。
How to import a CSV file of email addresses into phpList
Import Users – Walkthrough
メールアドレスの他に「姓(Last Name)」、「名(Fist Name)」の属性がある場合で区切り文字を「|」とした場合は、以下の様なファイル(test_import.txt)になる。