20070330

Mail::Form フルモデルチェンジ

当サイトでの一番人気スクリプトの Mail::Form をバージョンアップです。
今までは、やれ
 ・Jcode.pmがインストールされている環境用
 ・Perl5,8,1以上用
 ・Perl4以上用
なーんて様々な環境向けに個別にスクリプトを提供してきたワケですが、いい加減めんどくさくなってきたので、思いきって今バージョンからJcodeモジュールをバンドルする事にしました(正確にはモジュールの一部分だけなんですが)
で、Jcode.pmを使用する以上、Perlは最低でも「5」以上じゃないと動作しないのですが、今時Perl4なんか使ってないでしょう?だから良いんです。良いという事に決めました。

特徴
  1. Jcode.pmを標準でバンドル。当然Unicodeも標準で処理が可能になりました。
  2. 送信前に入力事項を確認する画面を表示(ON/OFF 切替可能)
  3. 全ての項目で必須入力と任意入力の切り替えが可能。
  4. ファイル構造の単純化。文字コード変換モジュール関連以外のスクリプトはたったの1個。
  5. ソースがマーキーシステム化。


とまぁこんな感じです。
まだろくにデバッグもしていないんですが、とりあえずチャレンジャー向けに置いておきます。

人柱版ダウンロード
案の定おびただしいバグが発見されました(゚∀゚)
只今修正CHU。しばらくおまちください。

バグ報告とかして貰えると非常に嬉しいです。同時に機能等の要望なんかも大歓迎ですよ?

[CLAP] [Permalink]

20070311

MT_de_MAIL カスタムTips -メール送信者のIPアドレスやホスト名を収集してみる-

ver2.04からスクリプトの改造が不要になりました
スクリプト内の『 $hostget 』というスカラー変数の値を『 1 』とするだけでこの機能がご利用頂けます。

いや、別に集めて悪用しようとかっていう訳では当然無く、スパムやイタズラなどが目に余る場合なんかに、役に立つかなーと思って。

『# sendmailにデータを渡す』という個所を探して頂き、一連の動作の末尾に新たにスクリプトを追加いたします。

# sendmailにデータを渡す
if (!(open(MAIL,"| $sendmail -t"))) { &mailerror('何らかの原因で送信できません。'); }
	print MAIL "To: $mailto\n";
	print MAIL "From: $name<$from>\n";
	print MAIL "Subject: $subject\n";
	print MAIL "MIME-Version: 1.0\n";
	print MAIL "Content-Transfer-Encoding: 7bit\n";
	print MAIL "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n";
	print MAIL "$comment\n\n\n";
  #時間を取得
	@tim  = localtime(time());
	$year = $tim[5] + 1900;
	$mon  = $tim[4] + 1;
	$t    = sprintf('%02d:%02d:%02d', $tim[2], $tim[1], $tim[0]);
	$date = year/$mon/$tim[3] $t;
  #IPを取得
	$ip   = $ENV{'REMOTE_ADDR'}
  #ホスト名を取得
	$host = $ENV{'REMOTE_HOST'}
	if($host eq ""){
	$host = gethostbyaddr(pack("C4", split('\.', $ip)), 2) || $ip;
	}
	print MAIL "--------------------------------------------------------\n";
	print MAIL "[送信日時]:$date\n";
	print MAIL "[IPアドレス]:$ip\n";
	print MAIL "[ホスト名]:$host\n";
	print MAIL "--------------------------------------------------------\n";

青いフォントの部分が、追加した個所。これでしつこいスパムやなんかは .htaccess でもってアクセス禁止の刑に処してやれば、心も晴々ですよ?。

[CLAP] [Permalink]

20070310

MT_de_MAIL カスタムTips - メールアドレスを必須入力事項にしてみる -

ver2.04からスクリプトの改造が不要になりました
送信フォーム内に

<input type="hidden" name="res" value="on" />>

というソースを挿入してください。
そうするとメールアドレスが必須入力になります。

デフォルトでは手軽に利用できる事を最優先にしている為、メールアドレスは入力しなくとも送信できるようにしてあります。だけど人によってはメアドを必須の入力にしたい方もいらっしゃるかと思います。そんな方への MT_de_MAIL の改造方法のお知らせです。

まず、以下の個所をスクリプト内から検索してください。

# 入力内容のチェック

  #■メールアドレス
  if(($from eq "") ) 
  #{&mailerror('大変申し訳ありません。メールアドレスは必ず入力してください。'); }
  {$from = "$mailto";}

ソースを見て頂ければお分かりになるように、実は $from が空白だった時(メアドが入力されていない時)にエラーを返す機能はすでに記述済なのですが、その機能はコメントアウトで殺してあります。そしてその替わりに、$from に $mailto (送信先アドレス)を代入しているワケです(これは電子メールの仕様上、送信元アドレスが設定されていないメールは送信が不可能な為の処置)

# 入力内容のチェック

  #■メールアドレス
  if(($from eq "") ) 
  {&mailerror('大変申し訳ありません。メールアドレスは必ず入力してください。'); }
  #{$from = "$mailto";}

ですので、以上のようにシャープ( # )の位置を1行ずらせば、簡単にメールアドレスの必須入力事項への移行は完了です。

[CLAP] [Permalink]

20070308

P3

永らく積みっぱなだったP3をやっているんですがね、なんかもういろいろ面白すぎてヤヴァイですよ?ゆかりっちの見えそうで見えない絶妙なスカート丈、転んだ時の会長の艶めかしいポーズ、そしてトドメを刺した時のアイギスのしぐさ…その全てが最高です。
プレイし始めた当初は『1日1日過ごさなきゃなんねーのかYO!こんなペースで1年??ウザ過ぎ―――!!!」なんて思っていましたが、海より深く反省しました。この調子でに2~3年プレイさせてください。時間足りなさすぎッス( ´Д⊂
はっきり言ってタルタロスなんざ潜ってる時間なんてありゃしねぇ。コミュランクとステータス上げるので手一杯だよママン!ああ!能登とばっかり仲良くしてたらメガネとマネージャーの機嫌が悪くなっちゃった!!!友近!宮本!電話してくんな―!!!!
ハァ、ハァ…
そんな感じでマッタリとプレイCHU

しかし…いい加減コンシューマーの積みも増えすぎたなぁ…「名探偵エヴァ」「ドラゴンシャドウスペル」「ひぐらし祭」etc、etc……
とりあいずP3で去年の備蓄はラストだからな、頑張って消化しなきゃ(PCゲーのことは考えたくもないぜ)

MT_de_MAIL微妙にアップデート

多分掲示板に書きこむ為の海外のロボットの仕業だと思うのですが、メールフォーム経由で無意味なメールを送ってくる事象が確認されております。こいつを防止する為に、メール本文に全角文字を含まないものは送信できないようなル―チンを追加実装いたしました(ver2.01)

■追加したソース

  # 日本語がないメッセージの書き込みを禁止する (スパム対策)
  if ($comment !~ /[\xA1-\xFE][\xA1-\xFE]/) {
  &mailerror("メール本文に全角文字を1文字も含まないものはスパムと判断し、送信できない仕様になっております。");
  }

この機能は、大崎 博基氏の『Perlメモ』を参考にさせて頂きました。多謝です。

[CLAP] [Permalink]

20070307

MT_de_mailでhtmlテンプレートを使用する

MovableTypeのサイドバーにメールフォームを設置する為のMT_de_MAILであるワケなのですが、なるべく設置を簡便に済ませる為に、エラー表示や送信完了表示に関しては『解る人だけカスタムしてくださいな』的に放り投げていた嫌いがありました。
でも、意外とハードルが高かったみたいで『なじょせばいいんぢゃあ?』といった声が多数寄せられたので、微妙に反省いたしました。んでもって要望の多かったHTMLテンプレートを使用できる様に改造してみましたとさ(→ver2,0)

ちなみに、この機能はあくまでも「ある程度解ってる人向け」に作ってみたもの。このドキュメントを読んで理解できない方は、申し訳ありませんが設置は諦めて下さい。

テンプレートファイルの作成手順例

まずはMTの管理画面にログオンしてください。
そしてtopページ(index.html)のテンプレートの編集画面を表示させたら 『テンプレートの中身』をそのまま全てクリップボードにコピーしてください(ウインドウズマシンなら、テキストエリア上で右クリック→『全て選択』→再び右クリック→『コピー』)
コピーしたら、テンプレートの一覧画面に戻り、『新しいインデックス・テンプレートを作る』をクリック。 『テンプレートの名前』は任意で適当に決定。 『出力ファイル名』は『mailtmp.html』としてやります。 そして『テンプレートの中身』には先ほどコピーしたtopページのテンプレートを貼り付けてやります。 このテンプレートを改造して、メール用のテンプレートを作成してみましょう。
改造と言っても意外と簡単。まずは、エントリー部分を記述している個所を探します。具体的には<MTEntries>から</MTEntries>までの部分の事です。

■例

<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta name="generator" content="http://www.movabletype.org/" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-script-Type" content="text/javascript" />
<title><$MTBlogName encode_html="1"$></title>
<$MTInclude module="head"$>
</head>
<body id="index">
<$MTInclude module="top"$>

<MTEntries lastn="5">
<$MTEntryTrackbackData$>
<MTDateHeader>
<h2><$MTEntryDate format="%Y%m%d"$></h2>
</MTDateHeader>
<h3 id="a<$MTEntryID pad="1"$>"><$MTEntryTitle$></h3>
<$MTEntryBody$>
<MTEntryIfExtended>
<p class="extended">
<a href="<$MTEntryPermalink$>#more">続きを読む "<$MTEntryTitle$>"</a>
</p>
</MTEntryIfExtended>
<p class="posted">
<a href="#container" title="このページのTOPへ">▲</a> 
<a href="<$MTEntryPermalink archive_type="Individual"$>" title="固定リンクURL"><$MTEntryDate format="%Y%m%d"$></a>
</p>
</MTEntries>

<$MTInclude module="bottom"$>
</body>
</html>

青いフォントで表した部分ですよ(ちなみに、このテンプレートはウチのindexページのものです)
ここの個所をですね、バッサリと削除しちゃってください。そして替わりにですね『$entries』と記述してやります

■例

<!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>" />
<meta name="generator" content="http://www.movabletype.org/" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-script-Type" content="text/javascript" />
<title><$MTBlogName encode_html="1"$></title>
<$MTInclude module="head"$>
</head>
<body id="index">
<$MTInclude module="top"$>

$entries

<$MTInclude module="bottom"$>
</body>
</html>

こんな感じにな。
以上でテンプレートの作成は終了。 『保存』をクリックしてブラウザを終了させて下さい。お疲れ様でした。

スクリプトの設定

スクリプトをテキストエディターで開いて、各種設定をしてやります。

#エラーや完了表示にテンプレートを使用する(使用する場合は'yes')
$tmpuse = 'yes';

青文字んトコね。ここに『yes』と入れてやります。バージョン2.02以降では、指定した個所にテンプレートファイルが存在すると自動的にテンプレートモードで動作いたします。
そんで次、先ほど作成したテンプレートファイルへのパスを指定してやります。

#テンプレートファイルへのパス(必ず相対パスで指定して下さい)
$tmp = '../../blog/mailtmp.html';

こんな感じね。ここで絶対に守って欲しいのが必ず相対パスで指定するとい言う事。URLや絶対パスでは動作しませんので注意してください(なんで動作しないのかは私にも解りませんので訊かないで下さい)
あ、あと当たり前ですが、上記のパスはあくまで例として勝手にデッチ上げたモノです。サイトの構築状況でそれぞれ違うと思いますので、ご自分の利用環境に合わせたパスの指定をしてあげてくださいね。

以上でスクリプトの方の設定も終了。編集し終わったスクリプトをMTの/pluguns/ディレクトリにアップして、パーミッションを変更してやればミッションコンプリートでございまーす。

追記

書き忘れておりましたが、テンプレートHTMLファイルは『デフォルト設定のMovableTypeが生成する』という事を前提にしてありますので、UTF-8でエンコードされているモノとして扱っております。もしも仮に、テンプレートファイルを自作なさる場合は、UTF-8でエンコードするようにしてください。
もしもMTの設定を変更していて、UTF-8以外の文字コードを使用していたり、テンプレートを自作したいが、UTF-8を扱えないエディターを使用されている場合は、多少面倒くさいですが、スクリプトから変更してやる必要があります。バージョン2.02以降は、スクリプトの設定で使用文字コードを変更することができます。

&Jcode::convert(\$body, 'utf8');

という個所をスクリプト全体から検索してください(2個所ある筈です。すげー下の方)この青い個所を使用する文字コードに書き換えてください。(2個所とも)
書式は

&Jcode::convert(\$body, 'euc') ... EUCに変換
&Jcode::convert(\$body, 'jis') ... JIS(ISO-2022-JP)に変換
&Jcode::convert(\$body, 'sjis') ... Shift-JISに変換
&Jcode::convert(\$body, 'ucs2') ... UCS2に変換

こんな感じっス。

[CLAP] [Permalink]