kENT WEBのpostmailを使わせていただいています。

手を加えた作業の覚書

一つ目 UTF-8の対応が必要になり画竜点睛の「UTF対応のサーバーにpostmailを導入しなきゃいけない事態になったとき。」 を参考に修正しました。

1.jcode.plをJcode.pmに変更。Jcode.pmはJcode.pmより入手。

2.postmailで使用するhtmlのencodingとcharsetをUTF-8に変更。

3.postmailで使用するcgi,htmlをUTF8Nで保存。

4.postmail.cgiの修正。

文字コード変換ライブラリ【サーバパス】の変更

require './lib/jcode.pl';     ↓ use Jcode;

# テンプレ変数変換の&jcode::convert変更

&jcode::convert(\$tbody, 'jis');
    ↓
&Jcode::convert($tbody, 'jis');

# 本文内容の&jcode::convert変更

&jcode::convert(\$tmp, 'jis', 'sjis');
    ↓
&Jcode::convert($tmp, 'jis', 'utf8');

# 送信内容フォーマット化の前の# MIMEエンコードの後に2行追加

$subject = jcode($subject)->sjis;
$tbody = jcode($tbody)->sjis;

# 送信内容フォーマット化のcharset変更

$body .= "Content-type: text/plain; charset=iso-2022-jp\n";
    ↓
$body .= "Content-type: text/plain; charset=Shift_JIS\n";

# フォームデコードの&jcode::convertをコメント化

&jcode::convert(\$key, 'sjis');
&jcode::convert(\$val, 'sjis');
    ↓
#&jcode::convert(\$key, 'sjis');
#&jcode::convert(\$val, 'sjis');

# チェックモードのcharsetをutf-8に変更

# BASE64変換の2箇所変更

&jcode::convert(\$sub, 'jis');
    ↓
&Jcode::convert(\$sub, 'jis');


$sub = "=?iso-2022-jp?B?" . &b64enc($sub) . "?=";
    ↓
$sub = "=?utf-8?B?" . &b64enc($sub) . "?=";


二つ目
元々フォームのname属性にnameとemailを使っていると
送信者名の編集やメールアドレスの簡易チェックの機能があります。
name属性の内容を変えていても機能して欲しかったのでcgiの
$in{'name'}と$in{'email'}を変更した内容に修正しました。
UTF-8では上記の
# 送信内容フォーマット化の前の# MIMEエンコードの後に2行追加
に加えて

$in{'変更したname'} = jcode($in{'変更したname'})->sjis;
が必要でした。


フォームの修正
フォームで日付を入力する際、selectで選択するようにして、
今日の日付が初期表示されるようにしました。
select

<p>年月日<br /><select id="year" name="年">   
    <option value="2010">2010   
    </option><option value="2011">2011   
    </option><option value="2012">2012   
    </option><option value="2013">2013
</option></select>年<br />
<select id="month" name="月">
    <option value="1">1   
    </option><option value="2">2   
    </option><option value="3">3   
    </option><option value="4">4   
    </option><option value="5">5   
    </option><option value="6">6   
    </option><option value="7">7   
    </option><option value="8">8   
    </option><option value="9">9   
    </option><option value="10">10   
    </option><option value="11">11   
    </option><option value="12">12
</option></select>月<br />
<select id="day" name="日">
    <option value="1">1
    </option><option value="2">2
    </option><option value="3">3
    </option><option value="4">4
    </option><option value="5">5
    </option><option value="6">6
    </option><option value="7">7
    </option><option value="8">8
    </option><option value="9">9
    </option><option value="10">10
    </option><option value="11">11
    </option><option value="12">12
    </option><option value="13">13
    </option><option value="14">14
    </option><option value="15">15
    </option><option value="16">16
    </option><option value="17">17
    </option><option value="18">18
    </option><option value="19">19
    </option><option value="20">20
    </option><option value="21">21
    </option><option value="22">22
    </option><option value="23">23
    </option><option value="24">24
    </option><option value="25">25
    </option><option value="26">26
    </option><option value="27">27
    </option><option value="28">28
    </option><option value="29">29
    </option><option value="30">30
    </option><option value="31">31
</option></select>日</p>

本日日付を初期表示するためのjs
window.onload=function(){
var da;
var yy;
var mm;
var dd;
var i;
da = new Date();
yy = da.getYear();
mm = da.getMonth()+1;
dd = da.getDate();
if (yy < 2000) { yy += 1900; }

var sel=document.getElementById("year")
for(i=0;i<sel.length;i++){
if( sel.options[i].value == yy ){
sel.options[i].selected = true;
break;
}
}
var sel=document.getElementById("month")
for(i=0;i<sel.length;i++){
if( sel.options[i].value == mm ){
sel.options[i].selected = true;
break;
}
}
var sel=document.getElementById("day")
for(i=0;i<sel.length;i++){
if( sel.options[i].value == dd ){
sel.options[i].selected = true;
break;
}
}
}

bodyでonLoad=dateInit()を追加