pukiwiki でのメール機能について
pukiwiki でのメール機能
はじめに
pukiwiki でのメール機能が必要であったので調べてみた。
- 管理人にメールで通知する機能が欲しい
- 毎日更新を見張るのは大変であるため
- 更新のたびにメールする必要はない
- 煩雑であるため
ごく簡単に調べた結果 pkwkmail2.inc.php というプラグインが見つかった。 pkwkmail.inc.php を前身にもつプラグインである。設置は簡単と書いてある割に、少し迷うところがあったので記述しておきたい。
準備
- pkwkmail2.inc.php から pkwkmail2_088.zip (執筆時)をダウンロードし、php ファイルを plugin ディレクトリに移動させておく。
- 以下の注意があるため、アクセス制限を設定する。「手っ取り早く試してみる方法」を参考にしてもよい。
このプラグインは pukiwiki.ini.php で $modifier として設定されている人が BASIC 認証に入っていないと編集できないようにしています。 また、設定情報を :config/plugin ... 以下の wiki ページに書き込むので、管理者以外が :config 以下を編集できるような環境では用いないでください(ページ名称がコロンで始まるページに編集認証をかけるなどしてください。
- 好きなページに(ページAとする)
#pkwkmail2(0)
と書く。
- ページAを凍結する。
- ページAに「管理画面」へのリンクが現れるので、設定を行う。
- テストでメールを送信してみる。
これで終了…のはずなのだが、メールアドレスが正しいものか判定する正規表現に誤りがあり、例えば"+"の文字が含まれるメールアドレスに送信しようとすると、「エラーで送信できなかった」旨が表示される。
メールアドレスの正規表現の訂正
せめて
+
をlocal-partに含むメールアドレスを拒否するサービスがこの世から絶滅しますように。
とあるように、"+"の文字が含まれるメールアドレスが拒否されることは良くある。しかし、gmail を利用するときに、"id @gmail.com" 以外に "id+好きな文字@gmail.com" というメールアドレスが利用できるのは便利であるから、利用したい。これには、mail_chk_regex 関数の正規表現の部分を訂正すればよい。
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
が短くてよいが、「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ によれば、
/^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$/
が正しいとのことである。もともとの正規表現
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/
を上記のものに書き換えればよい。具体的には
if( ! preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i",$mailadrs ) ) {
を ” と / を適切にエスケープした
if( ! preg_match("/^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+\/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+\/=?\^`{}~|\-]+))*)|(?:\"(?:\\[\
^\r\n]|[^\\\"])*\")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+\/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+\/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\\
x5e-\x7e])*\])))$/i" ,$mailadrs) ) {
にする。PHPで(できるだけ)正しいメールアドレスをチェックする正規表現
http://fdays.blogspot.jp/2007/10/rfc-2822-j0hn-d0e-10-pregmatch-9.html
も参考にしたい。
ディスカッション
コメント一覧
まだ、コメントがありません