メール配信ソフトウェア phpList を日本語対応&カスタマイズしてみた

通常業務のほとんどを Fedora 18 上で行なっている、当社では珍しい存在の yone です。GNOME 3 もなんのその、慣れれば何とかなります。

当社では、ニュースレターやプレスリリース等のメールを一括送信するために、phpList というオープンソース・ソフトウェアを使っています。phpList はニュースレターの発行に必要な機能を一通り揃えた高機能なメール配信用ソフトウェアですが、本家の最新バージョンは英語版として公開されるため、最新版の日本語対応と、いくつかのカスタマイズを行ったうえで運用しています。

この記事では、当社で行った日本語対応とカスタマイズ方法について紹介します。

phpList 2.10.19 の日本語対応版は、下記でも配布されています。ご自身のニーズと近いものを選択されると良いでしょう。

phpList の日本語対応作業

phpList の日本語化といいますと、ディアイピィ社によるPHPList日本語化適用版が挙げられます。

ところが、当社で導入しようとした当時、最新版 phpList は 2.10.17 がリリースされていましたが、日本語化適用版は 2.10.12 と大きな開きがありました。この間にセキュリティアップデートも含んでおり、当社で運用するものは最新の 2.10.17 をベースに使いたいと思い、作業を始めました。

その後、本家phpList は 2.10.19 までバージョンアップがあり、それに追従して phpList 2.10.19 日本語対応 を作りました。

日本語対応作業にあたっては、ディアイピィ社の phplist-2.10.12日本語化適用版を参考にさせていただきました。また、日本語メッセージファイル (public_html/lists/texts/japanese.inc) は、当社の用途に合わせて文面を変更しています。

  • 日本語メールの強制設定
  • 文字コードを EUC-JP から UTF-8 へ変更
  • デフォルトフォーマットをテキストへ変更
  • 訳文の追加・変更

適用差分は下記になります。2.10.19 へ適用可能です。

  1. データベースは、character set utf8 で作成する
  2. 下記ファイルを、EUC-JP から UTF-8 へ変換
    • public_html/lists/texts/japanese.inc
    • public_html/lists/admin/phpmailer/language/phpmailer.lang-ja.php
  3. phplist-2.10.17-ja.patch
Japanized phplist patch
このパッチの他、下記のファイルを EUC-JP から UTF-8 へ変換する必要があります
	public_html/lists/texts/japanese.inc
	public_html/lists/admin/phpmailer/language/phpmailer.lang-ja.php


diff -urN phplist-2.10.17.orig/public_html/lists/admin/class.phplistmailer.php phplist-2.10.17/public_html/lists/admin/class.phplistmailer.php
--- phplist-2.10.17.orig/public_html/lists/admin/class.phplistmailer.php	2011-08-09 00:25:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/class.phplistmailer.php	2011-10-17 17:51:01.656699810 +0900
@@ -8,7 +8,7 @@
 
 class PHPlistMailer extends PHPMailer {
     var $isText = false;
-    var $WordWrap = 75;
+    var $WordWrap = 0;
     var $encoding = 'base64';
     var $image_types = array(
                   'gif'  => 'image/gif',
@@ -24,7 +24,7 @@
 
     function PHPlistMailer($messageid,$email) {
     #  parent::PHPMailer();
-      parent::SetLanguage('en', dirname(__FILE__) . '/phpmailer/language/');
+      parent::SetLanguage('ja', dirname(__FILE__) . '/phpmailer/language/');
       $this->addCustomHeader("X-Mailer: phplist v".VERSION);
       $this->addCustomHeader("X-MessageID: $messageid");
       $this->addCustomHeader("X-ListMember: $email");
diff -urN phplist-2.10.17.orig/public_html/lists/admin/defaultconfig.inc phplist-2.10.17/public_html/lists/admin/defaultconfig.inc
--- phplist-2.10.17.orig/public_html/lists/admin/defaultconfig.inc	2011-09-20 23:35:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/defaultconfig.inc	2011-10-17 17:50:04.603210442 +0900
@@ -484,12 +484,12 @@
 ),
 
 "html_charset" => array (
-  "UTF-8",
+  "ISO-2022-JP",
   "Charset for HTML messages",
   "text"
 ),
 "text_charset" => array (
-  "UTF-8",
+  "ISO-2022-JP",
   "Charset for Text messages",
   "text"
 ),
diff -urN phplist-2.10.17.orig/public_html/lists/admin/languages.php phplist-2.10.17/public_html/lists/admin/languages.php
--- phplist-2.10.17.orig/public_html/lists/admin/languages.php	2011-09-20 23:35:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/languages.php	2011-10-17 17:50:04.603210442 +0900
@@ -14,6 +14,7 @@
 "es"=>array("español","iso-8859-1","iso-8859-1, windows-1252"),
 #"fa" => array('Persian','utf-8','utf-8'),
 "fr"=>array("français ","iso-8859-1","iso-8859-1, windows-1252 "),
+"ja"=>array("Japanese ","utf-8","shift_jis, iso-2022-jp, euc-jp, utf-8"),
 "pl"=>array("Polish ","iso-8859-2","iso-8859-2"),
 "pt-br"=>array("português ","iso-8859-1","iso-8859-1, windows-1252"),
 "zh-tw" => array("Traditional Chinese","utf-8","utf-8"),
diff -urN phplist-2.10.17.orig/public_html/lists/admin/phpmailer/class.phpmailer.php phplist-2.10.17/public_html/lists/admin/phpmailer/class.phpmailer.php
--- phplist-2.10.17.orig/public_html/lists/admin/phpmailer/class.phpmailer.php	2011-05-12 23:09:40.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/phpmailer/class.phpmailer.php	2011-10-17 17:50:04.604210468 +0900
@@ -33,7 +33,7 @@
      * Sets the CharSet of the message.
      * @var string
      */
-    var $CharSet           = "iso-8859-1";
+    var $CharSet           = "iso-2022-jp";
 
     /**
      * Sets the Content-type of the message.
@@ -46,7 +46,7 @@
      * "7bit", "binary", "base64", and "quoted-printable".
      * @var string
      */
-    var $Encoding          = "8bit";
+    var $Encoding          = "7bit";
 
     /**
      * Holds the most recent mailer error message.
@@ -397,6 +397,8 @@
      * @return bool
      */
     function SendmailSend($header, $body) {
+        $body = mb_convert_encoding($body, $this->CharSet);
+
         if ($this->Sender != "")
             $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender);
         else
@@ -427,6 +429,8 @@
      * @return bool
      */
     function MailSend($header, $body) {
+        $body = mb_convert_encoding($body, $this->CharSet);
+
         $to = "";
         for($i = 0; $i < count($this->to); $i++)
         {
@@ -465,6 +469,8 @@
      * @return bool
      */
     function SmtpSend($header, $body) {
+        $body = mb_convert_encoding($body, $this->CharSet);
+
         include_once($this->PluginDir . "class.smtp.php");
         $error = "";
         $bad_rcpt = array();
@@ -1149,6 +1155,8 @@
      * @return string
      */
     function EncodeHeader ($str, $position = 'text') {
+      $str = mb_encode_mimeheader($str, $this->CharSet, 'B');
+
       $x = 0;
 
       switch (strtolower($position)) {
diff -urN phplist-2.10.17.orig/public_html/lists/config/config.php phplist-2.10.17/public_html/lists/config/config.php
--- phplist-2.10.17.orig/public_html/lists/config/config.php	2011-09-20 23:35:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/config/config.php	2011-10-17 17:50:04.604210468 +0900
@@ -10,13 +10,15 @@
 
 */
 
+mb_language("Japanese");
+mb_internal_encoding("UTF-8");
 
 # 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";
 
 # what is your Mysql database server
 $database_host = "localhost";
  1. public_html/lists/texts/japanese.inc
<?php

# language dependent text used in the interface for users (not admin)

$strCharSet             = 'UTF-8';
$strName                = '名前';
$strAddress             = '住所';
$strEmail               = '電子メール';
$strTown                = '住所';
$strPostcode            = '郵便番号';
$strSubscribeInfo       = '以下のフォームを使い1つ以上のニュースレター・メールマガジンを登録してください。';
$strRequired            = '必須項目';
$strSubscribeTitle      = 'ニュースレター・メールマガジンの配信登録';
$strPleaseSelect        = '<p>配信登録したいニュースレター・メールマガジンを選択してください。</p><p>チェックされていないニュースレター・メールマガジンは配信されません。</p><p>配信中のニュースレター・メールマガジンを停止する場合は、チェックを外してください。</p>';
$strSubmit              = '選択したニュースレター・メールマガジンの配信';
$strNotAvailable        = '申し訳ございません。現在、利用可能なニュースレター・メールマガジンはありません。';
$strEnterName           = 'お名前を入力してください';
$strEnterEmail          = '電子メールアドレスを入力してください';
$strConfirmEmail        = '電子メール(確認)';
$strInvalidHostInEmail  = 'すいません。そのドメインへ電子メールを送ることはできません。正しい電子メールアドレスを入力しているか確認してください。';
$strEnterList           = '<p>配信登録したいニュースレター・メールマガジンを選択してください。</p><p>チェックされていないニュースレター・メールマガジンは配信されません。</p><p>配信中のニュースレター・メールマガジンを停止する場合は、チェックを外してください。</p>';
$strPleaseEnter         = '入力してください:';
# ありがとうメッセージにはプレースホルダーを含めることができます。
#$strThanks              = '[FIRST NAME]さん、<br/>ニュースレター・メールマガジンを配信登録していただきありがとうございます。';
$strThanks              = 'ニュースレター・メールマガジンを配信登録していただきありがとうございます。';
# 登録認証のお願いメッセージにはプレースホルダーを含めることができます。
#$strEmailConfirmation   = 'あなたの電子メールアドレス [email] がシステムに追加されました。間もなく配信登録したニュースレター・メールマガジンについて配信確定のお願いが電子メールで送信されます。';
$strEmailConfirmation   = 'あなたの電子メールアドレスがシステムに追加されました。間もなくニュースレター・メールマガジンについて配信確定のお願いが電子メールで送信されます。';
$strEmailFailed          = '申し訳ございません。。配信確定のお願いの電子メールを送信することに失敗しました。再度、「Reload」をクリックしてください。もし、まだ失敗するようでしたら、あなたの電子メールアドレスは"配信解除済リスト"に追加されているかもしれません。、これは、私たちの配信システムから電子メールを受け取れないことを意味しています。そのような場合、管理者までご連絡ください。';
$strUnsubscribeTitle    = 'ニュースレター・メールマガジンの配信登録解除';
$strUnsubscribeDone     = 'ニュースレター・メールマガジンの配信を解除しました。間もなく配信解除確認の電子メールが送信されますのでご確認ください。';
$strBack                = '戻る';
$strUnsubscribeInfo     = 'ニュースレター・メールマガジンの配信解除';
$strContinue            = '続ける';
$strUnsubscribeSelect   = '配信解除したいニュースレター・メールマガジンを選択してください。';
$strAllLists            = '全てのニュースレター・メールマガジン';
$strNoLists             = '該当はありません';
$strUnsubscribeRequestForReason = '<br/>ニュースレター・メールマガジンに興味がなくなったことを非常に残念に思います。私たちのサービスを改善するために、理由を教えていただければ幸いです。';
$strUnsubscribeFinalInfo = '<br/><p><b>注意</b>: もし配信停止ではなく、メールアドレスを変更したい場合は、<a href="[PREFERENCESURL]">情報の更新</a>をおこなってください。</p>';
$strNoListsFound        = '本メールアドレスは登録されていません。';
$strResubmit            = 'Re-Submit Email';
$strUnsubscribeSubmit   = '選択しているニュースレター・メールマガジンの配信解除';
$strValuesMissing       = '次の必須項目に入力されていません。';
$strConfirmInfo         = 'ニュースレター・メールマガジンを配信登録していただきありがとうございます。現在配信登録されているニュースレター・メールマガジンは以下のとおりです。';
$strConfirmTitle        = 'PHPlist メンバーシップ設定ページ';
$strUserNotFound        = '本メールアドレスは登録されていません。';
$strUserAlreadyInitialised = 'すいません。あなたのパスワードは既に設定されています。';
$strConfirmFailInfo     = 'すいません。配信確定はされませんでした。受け取った電子メールに記載されている完全なWEBアドレス(URL)を確かめてください。このWEBアドレス(URL)は複数行にわかれて表示されることがあります。';
$strPreferHTMLEmail     = '私はHTMLフォーマットで電子メールを受け取ります。';
$strPreferTextEmail     = '私はTextフォーマットで電子メールを受け取ります。';
$strPreferredFormat      = '電子メールの優先フォーマット:';
$strText                 = 'テキスト';
$strHTML                = 'HTML';
$strPreferencesTitle    = '配信情報の更新';
$strPreferencesInfo     = '下記の情報が正しいことを確認し、"更新"ボタンをクリックしてください。';
$strUpdatePreferences   = '更新';
$strPreferencesEmailChanged = 'メールアドレスを変更された場合は、新しいメールアドレスを確定するためのメールを送信します。メールに記載されたリンクをクリックしてください。';
$strYouAreBlacklisted = 'あなたの電子メールアドレスは配信解除済リストに掲載されています。いかなるメッセージもあなたには決して送信されません。 <br/>
また電子メールを受け取るために、管理者による手動の解除が必要です。またニュースレター・メールマガジンを受け取りたいことをはっきりと明言し、わたしたちにコンタクトしてください。配信解除済リストからあなたの電子メールアドレスを削除します。';
$strPreferencesNotificationSent = 'ご変更いただいた内容を電子メールでお送りいたしました。';
$strPreferencesUpdated = 'ありがとうございます。配信情報を更新いたしました。';
$strClickHere          = 'ここをクリック';
$strThisLink           = 'このリンク';
$strToUnsubscribe      = 'もし、いかなるニュースレター・メールマガジンも受け取りたくないならば、こちらをクリック:';
$strToUpdate           = 'メールアドレスを変更したり、配信停止をする場合は、こちらをクリック:';
$strSendHTML           = 'HTMLメールを受信する';
$strYes                = 'はい';
$strNo                 = 'いいえ';
$strUnsubscribe        = '配信停止';
$strAllMailinglists    = 'すべてのニュースレター・メールマガジン';
$strAttachmentIntro     = 'このメッセージにはウェブブラウザでみることができる添付ファイルが含まれています:';
$strLocation           = '登録情報';
$strFrequency           = 'メッセージを送る頻度';
$strHourly             = '毎時';
$strDaily               = '毎日';
$strWeekly             = '毎週';
$strMonthly             = '毎月';
$strChoosePassword      = 'パスワードを選択してください';
$strConfirmPassword    = 'パスワード(確認)';
$strEnterPassword       = 'パスワードを入力してください';
$strForgotPassword     = 'パスワードを忘れた方へ';
$strPassword           = 'パスワード';
$strPassword2           = 'パスワード(確認)';
$strPasswordsNoMatch    = 'パスワードが同じでありません。';
$strEmailsNoMatch     = '入力した電子メールアドレスがマッチしません。';
$strInvalidPassword     = 'エラー: 電子メールまたはパスワードが妥当でありません。';
$strPasswordSent        = 'あなたのパスワードを電子メールで送りましたので、数分後に電子メールを受信してください。';
$strPasswordRemindSubject = 'ニュースレター・メールマガジンに対するあなたのパスワード';
$strPasswordRemindMessage = 'Your password is ';
$strPasswordRemindInfo = '電子メールでパスワードを受け取るために、電子メールアドレスを入力して、"'.$strForgotPassword.'" ボタンをクリックしてください。';
$strLogin               = 'ログイン';
$strLoginTitle          = '電子メールアドレスとパスワードを入力してください。';
$strLoginInfo           = 'このページはパスワードが必要です。電子メールアドレスとパスワードを入力してください。';
$strPersonalLocationInfo = '
  <p>電子メールアドレスを入力して、"続ける"をクリックしてください。<br/>
  ご入力いただいたメールアドレス宛に「配信情報変更用URL」が記載されたメールをお送りいたします。</p>
';
$strPersonalLocationSent = '<h1>ご入力いただいたメールアドレス宛に「登録情報変更用URL」が記載されたメールをお送りしました。</h1>
<br/><p>※他に変更される電子メールアドレスがありましたら、下のフォームへご入力ください。</p>';
$strUserExists   = '<br/>その電子メールアドレスをもつユーザは既に存在し、異なったパスワードになっています。';
$strUserExistsExplanationStart = '<br/>あなたのパスワードを入手するために、クリック ';
$strUserExistsExplanationLink = 'ここ';
$strUserExistsExplanationEnd = '「配信情報変更用URL」をリクエストできるページにいく';
$strExplainBlacklist = 'ここで入力した電子メールアドレスは配信解除されます。';
$strForwardTitle = 'メッセージを誰かに転送する';
$strForwardSubtitle = 'メールタイトル付でメッセージを転送する ';
$strForwardEnterEmail = '転送するために妥当な電子メールアドレスを入力してください。';
$strForwardInvalidEmail = '%s は妥当な電子メールアドレスではありません';
$strForwardBlacklistedEmail = '転送先電子メールアドレスは配信解除されているため、登録できません。';
$strForwardEnterEmails = '転送先電子メールアドレス数を1行に1つずつ入力してください。最大 %s まで。';
$strForwardPersonalNote = '転送メールの前に追加するテキストメッセージ(最大 %d 文字)';
$strForwardSuccessInfo ='メッセージは転送されました。';
$strForwardFailInfo = 'メッセージの転送は失敗しました。';
$strForwardAlreadyDone = 'このメッセージは既にうまくその電子メールアドレスに転送されました。';
$strForwardCountReached = '転送先電子メールアドレス数が多すぎます';
$strForwardNoteLimitReached = '追加するテキストメッセージが長すぎます';
$strForwardFooter = 'このメッセージは[FORWARDEDBY]によりあなたに転送されました。
  このニュースレター・メールマガジンは自動的に登録されません。
  このニュースレター・メールマガジンを今後受信するには以下のアドレスをクリックしてください。';
$strForward = '転送';
$strFwd = 'Fwd'; # short version of forward for email subject
  1. 管理ページへアクセスし、設定を変更する
    • 「Charset for HTML messages」を「ISO-2022-JP」へ変更
    • 「Charset for Text messages」を「ISO-2022-JP」へ変更

HTML メールを扱わないようにする

当社の使い方では、メールはテキスト形式のみで送信します。HTML メールは使っていません。誤って HTML を選択しないよう、機能を殺しました。

  1. phplist-2.10.17-textmail.patch
diff -urN phplist-2.10.17.orig/public_html/lists/admin/send_core.php phplist-2.10.17/public_html/lists/admin/send_core.php
--- phplist-2.10.17.orig/public_html/lists/admin/send_core.php	2011-04-29 20:41:44.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/send_core.php	2011-09-30 17:33:14.118971548 +0900
@@ -72,7 +72,7 @@
 if (!$id) {
   $defaulttemplate = getConfig('defaultmessagetemplate');
   Sql_Query(sprintf('insert into %s (subject,status,entered,sendformat,embargo,repeatuntil,owner,template,tofield,replyto)
-    values("(no subject)","draft",now(),"HTML",now(),now(),%d,%d,"","")',$GLOBALS["tables"]["message"],$_SESSION["logindetails"]["id"],$defaulttemplate));
+    values("(no subject)","draft",now(),"text",now(),now(),%d,%d,"","")',$GLOBALS["tables"]["message"],$_SESSION["logindetails"]["id"],$defaulttemplate));
   $id = Sql_Insert_id();
   # 0008720: Using -p send from the commandline doesn't seem to work
   if(!$GLOBALS["commandline"]){
@@ -1122,7 +1122,7 @@
     $formatting_content .= $_POST["sendformat"]=="HTML"?"checked":"";
     $formatting_content .= '>
   '.$GLOBALS['I18N']->get("text").' <input type=radio name="sendformat" value="text" ';
-    $formatting_content .= $_POST["sendformat"]=="text"?"checked":"";
+    $formatting_content .= $_POST["sendformat"]=="text" || !isset($_POST["sendformat"]) ?"checked":"";
     $formatting_content .= '>
   ';
 
@@ -1134,7 +1134,7 @@
 
 //  0009687: Confusing use of the word "Both", indicating one email with both text and html and not two emails
 //  $formatting_content .= $GLOBALS['I18N']->get("textandhtml").' <input type=radio name="sendformat" value="text and HTML" ';
-//  $formatting_content .= $_POST["sendformat"]=="text and HTML" || !isset($_POST["sendformat"]) ?"checked":"";
+//  $formatting_content .= $_POST["sendformat"]=="text and HTML"?"checked":"";
 //  $formatting_content .= '>';
 
   if (USE_PDF) {

「<目次>」が書けない

<〜> のような HTML タグ形式らしい文字列を見つけると、テキストメール送信時は削除する動作になっていました。HTML メールは使わないと心に決めた身には不便でならないので、この機能を殺します。

public_html/lists/admin/send_core.php line:205
  $htmlformatted = strip_tags($_POST["message"]) != $_POST["message"];
        ↓
  $htmlformatted = false

public_html/lists/admin/send_core.php line:315-316
  if (!$htmlformatted  && strip_tags($_POST["message"]) !=  $_POST["message"])
    $errormsg = '<span  class="error">'.$GLOBALS['I18N']->get("htmlusedwarning").'</span>';
        ↑2行ともコメントアウト

なお、当社ではこの修正は使っていないため、無責任な動作未確認品です。

ヘッダが本文にまで飛び出ないようにする

メール本文にメールのヘッダ情報が含まれてしまう、という事象がありました。
Google さんに尋ねてみると、下記を見つけました。

  • phplist日本語版でメールヘッダが飛び出る場合の修正法
    ※ 2019/11/11 リンク切れになってしまいました

RFC 的にどうなんだろうと思いつつ、下記の修正を適用しました。

  1. phplist-2.10.19-header-lf.patch
--- phplist-2.10.19/public_html/lists/admin/phpmailer/class.phpmailer.php.orig	2013-04-18 18:42:31.834738423 +0900
+++ phplist-2.10.19/public_html/lists/admin/phpmailer/class.phpmailer.php	2013-04-18 18:43:34.381341705 +0900
@@ -1155,7 +1155,7 @@
      * @return string
      */
     function EncodeHeader ($str, $position = 'text') {
-      $str = mb_encode_mimeheader($str, $this->CharSet, 'B');
+      $str = mb_encode_mimeheader($str, $this->CharSet, 'B', "\n");
 
       $x = 0;
 

unsubscribe リンクを非表示

[UNSUBSCRIBE] は、全てのニュースレターの配信を一括して停止します。
ニュースレターごとに配信停止をお願いしたいため、[UNSUBSCRIBE] リンクを非表示にしました。

--- phplist-2.10.17.orig/public_html/lists/index.php	2011-09-20 23:35:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/index.php	2012-03-09 15:41:06.107111589 +0900
@@ -266,7 +266,6 @@
     printf('<p><a href="./?p=subscribe">%s</a></p>',$strSubscribeTitle);
   }
 
-  printf('<p><a href="./?p=unsubscribe">%s</a></p>',$strUnsubscribeTitle);
   print $PoweredBy;
   print $data["footer"];
 }
@@ -296,8 +295,7 @@
   } else {
     $html .= '<input type=submit name="forgotpassword" value="'.$GLOBALS["strForgotPassword"].'">';
   }
-  $html .= '<br/><br/>
-    <p><a href="'.getConfig("unsubscribeurl").'&id='.$id.'">'.$GLOBALS["strUnsubscribe"].'</a></p>';
+  $html .= '<br/><br/>';
   $html .= '</form>'.$GLOBALS["PoweredBy"];
   $html .= $data["footer"];
   return $html;
@@ -322,8 +320,7 @@
   $html .= '<tr><td>'.$GLOBALS["strEmail"].'</td><td><input type=text name="email" value="'.$email.'" size="30"></td></tr>';
   $html .= '</table>';
    $html .= '<p><input type=submit name="sendpersonallocation" value="'.$GLOBALS["strContinue"].'"></p>';
-  $html .= '<br/><br/>
-    <p><a href="'.getConfig("unsubscribeurl").'&id='.$id.'">'.$GLOBALS["strUnsubscribe"].'</a></p>';
+  $html .= '<br/><br/>';
   $html .= '</form>'.$GLOBALS["PoweredBy"];
   $html .= $data["footer"];
   return $html;
@@ -395,7 +392,6 @@
 
   $html .= '<p><input type=submit name="update" value="'.$GLOBALS["strUpdatePreferences"].'" onClick="return checkform();"></p>
     </form><br/><br/>
-    <p><a href="'.getConfig("unsubscribeurl").'&id='.$id.'">'.$GLOBALS["strUnsubscribe"].'</a></p>
   '.$GLOBALS["PoweredBy"];
   $html .= $data["footer"];
   return $html;
@@ -519,7 +515,6 @@
     $html .= '<div style="display:none"><input type="text" name="VerificationCodeX" value="" size="20"></div>';
   $html .= '<p><input type=submit name="subscribe" value="'.$data["button"].'" onClick="return checkform();"></p>
     </form><br/><br/>
-    <p><a href="'.getConfig("unsubscribeurl").'&id='.$id.'">'.$GLOBALS["strUnsubscribe"].'</a></p>
   '.$GLOBALS["PoweredBy"];
   $html .= $data["footer"];
   return $html;

メール文末の「powered by phpList」を非表示

本家phpListでは、配信するメール文末に「powered by phpList」と必ず追記されます。メールを受信する大多数の方には意味不明なので、あえて非表示としました。
ソース内では「signature はなるべく残して欲しい」と表明されているので、大変心苦しい判断だったのですが、ニュースレターの購読申込・中止等を行うウェブフォームには、敬意を表してバナーとリンクを貼っています。また、この記事自体も phpList への謝意の表明として書いているつもりです。

X-Mailer: phplist ヘッダは残してあります。

--- phplist-2.10.17.orig/public_html/lists/admin/sendemaillib.php	2011-09-20 23:35:49.000000000 +0900
+++ phplist-2.10.17/public_html/lists/admin/sendemaillib.php	2011-10-27 15:57:19.060007553 +0900
@@ -299,20 +299,12 @@
     $htmlmessage = addHTMLFooter($htmlmessage,'<br /><br />'.$html["footer"]);
   if (eregi("\[SIGNATURE\]",$htmlmessage))
     $htmlmessage = eregi_replace("\[SIGNATURE\]",$html["signature"],$htmlmessage);
-  elseif ($html["signature"])
-# BUGFIX 0015303, 2/2
-//    $htmlmessage .= '<br />'.$html["signature"];
-      $htmlmessage = addHTMLFooter($htmlmessage, '
-'. $html["signature"]);
-# END BUGFIX 0015303, 2/2
   if (eregi("\[FOOTER\]",$textmessage))
     $textmessage = eregi_replace("\[FOOTER\]",$text["footer"],$textmessage);
   else
     $textmessage .= "\n\n".$text["footer"];
   if (eregi("\[SIGNATURE\]",$textmessage))
     $textmessage = eregi_replace("\[SIGNATURE\]",$text["signature"],$textmessage);
-  else
-    $textmessage .= "\n".$text["signature"];
 
 #  $req = Sql_Query(sprintf('select filename,data from %s where template = %d',
 #    $GLOBALS["tables"]["templateimage"],$cached[$messageid]["templateid"]));

そして続く

このように、メールを送信してみて不都合があったところを修正して、運用開始に至りました。まだ使わずに眠ったままの機能があります。まだまだ、いじり甲斐がありそうです。

この情報がお役に立てれば幸いです。また、phpList の開発関係者の皆様に感謝いたします。

参考文献

(yone)

タグ , | 2021/05/07 更新 |