記事No | : 2969 |
投稿日 | : 2008/02/23(Sat) 14:01:16 |
タイトル | : postmail に通し番号を入れるには? |
ID情報 | : hp2tour |
投稿者 | : Shun |
顧客からの要望で、フォームメールを利用したオンライン予約ページを作成し、「時間取得」から年月日時間を使った受付番号が送信メールに付与されるようカスタマイズしたのですが、先方から「番号はどうしても西暦プラス3桁の通し番号が付くようにしてくれ!」と難しい注文をつけられ困り果てています。 過去ログを参照し、Web Mart用の編集方法など試みたのですが"2008-001"から一向に番号が増えてくれません。 どなたかこの手のCGIに詳しい方がいらっしゃいましたら何卒お力をお貸しください。 よろしくお願いします。 以下、自分でトライした改造点です。 postmailのバージョンは4.1です
391行目付近
# 時間取得
($date1, $date2) = &get_time;
#▼ここから▼
open(IN,"$ordfile");
$count = <IN>;
close(IN);
($count, $dat) = split(/:/, $count);
$count++;
while (length($count) < 6) { $count = '0' . $count; } ## 番号の前に0を表示しない場合はこの行は不要
#▲ここまで追加▲
# コマンドタグで件名指定あり
476行目付近
# 本文テンプレ内の変数を置き換え
$tbody =~ s/\$message/$mbody/;
$tbody =~ s/\$count/$count/;<===メール本文中に受付番号を表示するために追加
514行目付近
# 送信内容フォーマット化
$body = "To: $email\n";
$body .= "From: $from\n";
if ($cc_mail && $email) { $body .= "Cc: $mailto\n"; }
$body .= "Bcc: $mailbcc\n";
$body .= "Subject: $subject2\n $count\n";<===件名に受付番号を入れるため追加
$body .= "MIME-Version: 1.0\n";
$body .= "Content-type: text/plain; charset=iso-2022-jp\n";
$body .= "Content-Transfer-Encoding: 7bit\n";
$body .= "Date: $date2\n";
$body .= "X-Mailer: $ver\n\n";
$body .= "$tbody\n";
# IO:Socketモジュール送信
539行目付近
# リロード
if ($reload) {
if ($ENV{'PERLXS'} eq "PerlIS") {
print "HTTP/1.0 302 Temporary Redirection\r\n";
print "Content-type: text/html\n";
}
print "Location: $back\n\n";
exit;
#▼ここから▼
open(DAT,"+< $ordfile") || &error("Open Error: $ordfile");
eval 'flock(DAT, 2);';
seek(DAT, 0, 0);
print DAT "$count\:$date";
truncate(DAT, tell(DAT));
close(DAT);
#▲ここまで追加▲
# 完了メッセージ
そして基本設定に以下を追加し
# 受注番号ログファイル
$ordfile = './no.dat';
no.datというファイルを作成して転送しています。
記事No | : 2973 |
投稿日 | : 2008/02/23(Sat) 18:38:37 |
タイトル | : Re: postmail に通し番号を入れるには? |
ID情報 | : fuyuki |
投稿者 | : BAL |
URL | : http://f43.aaa.livedoor.jp/~sumure/ |
> 顧客からの要望で、フォームメールを利用したオンライン予約ページを作成し、「時間取得」から年月日時間を使った受付番号が送信メールに付与されるようカスタマイズしたのですが、先方から「番号はどうしても西暦プラス3桁の通し番号が付くようにしてくれ!」と難しい注文をつけられ困り果てています。 過去ログを参照し、Web Mart用の編集方法など試みたのですが"2008-001"から一向に番号が増えてくれません。 どなたかこの手のCGIに詳しい方がいらっしゃいましたら何卒お力をお貸しください。 よろしくお願いします。 以下、自分でトライした改造点です。 postmailのバージョンは4.1です
>
> 391行目付近
> # 時間取得
> ($date1, $date2) = &get_time;
> #▼ここから▼
> open(IN,"$ordfile");
> $count = <IN>;
> close(IN);
> ($count, $dat) = split(/:/, $count);
> $count++;
> while (length($count) < 6) { $count = '0' . $count; } ## 番号の前に0を表示しない場合はこの行は不要
> #▲ここまで追加▲
>
> # コマンドタグで件名指定あり
>
>
> 476行目付近
> # 本文テンプレ内の変数を置き換え
> $tbody =~ s/\$message/$mbody/;
> $tbody =~ s/\$count/$count/;<===メール本文中に受付番号を表示するために追加
>
>
> 514行目付近
> # 送信内容フォーマット化
> $body = "To: $email\n";
> $body .= "From: $from\n";
> if ($cc_mail && $email) { $body .= "Cc: $mailto\n"; }
> $body .= "Bcc: $mailbcc\n";
> $body .= "Subject: $subject2\n $count\n";<===件名に受付番号を入れるため追加
> $body .= "MIME-Version: 1.0\n";
> $body .= "Content-type: text/plain; charset=iso-2022-jp\n";
> $body .= "Content-Transfer-Encoding: 7bit\n";
> $body .= "Date: $date2\n";
> $body .= "X-Mailer: $ver\n\n";
> $body .= "$tbody\n";
>
> # IO:Socketモジュール送信
>
>
> 539行目付近
> # リロード
> if ($reload) {
> if ($ENV{'PERLXS'} eq "PerlIS") {
> print "HTTP/1.0 302 Temporary Redirection\r\n";
> print "Content-type: text/html\n";
> }
> print "Location: $back\n\n";
> exit;
>
> #▼ここから▼
> open(DAT,"+< $ordfile") || &error("Open Error: $ordfile");
> eval 'flock(DAT, 2);';
> seek(DAT, 0, 0);
> print DAT "$count\:$date";
> truncate(DAT, tell(DAT));
> close(DAT);
> #▲ここまで追加▲
> # 完了メッセージ
>
>
> そして基本設定に以下を追加し
> # 受注番号ログファイル
> $ordfile = './no.dat';
>
>
> no.datというファイルを作成して転送しています。
以下でどうですか。
# ブラウザ情報
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/<//g;
$agent =~ s/>//g;
$agent =~ s/"//g;
$agent =~ s/&//g;
$agent =~ s/'//g;
#▼ここから▼
open(IN,"$ordfile");
$count = <IN>;
close(IN);
($count, $dat) = split(/:/, $count);
$count++;
while (length($count) < 3) { $count = '0' . $count; } ## 番号の前に0を表示しない場合はこの行は不要
$count2="$date3-$count";
#▲ここまで追加▲
local($bef, $mbody, $email, $subject2, $tbody);
# 本文テンプレ読み込み
open(IN,"$tmp_body");
while (<IN>) {
s/\r\n/\n/;
$tbody .= $_;
}
close(IN);
# テンプレ変数変換
$tbody =~ s/\$count2/$count2/; ## ←★追加
$tbody =~ s/\$date/$date1/;
$tbody =~ s/\$agent/$agent/;
$tbody =~ s/\$host/$host/;
&jcode'convert(*tbody, 'jis');
-- 途中省略 --
# メールアドレスがない場合は送信先に置き換え
if ($in{'email'} eq "") { $email = $mailto; }
else { $email = $in{'email'}; }
$subject="$subject:$count2"; ## ←★追加
# MIMEエンコード
-- 途中省略 --
# sendmail送信
} else {
open(MAIL,"| $sendmail -t -i") || &error("メール送信失敗");
print MAIL "$body\n";
close(MAIL);
}
#▼ここから▼
open(DAT,"+< $ordfile") || &error("Open Error: $ordfile");
eval 'flock(DAT, 2);';
seek(DAT, 0, 0);
print DAT "$count\:$date1";
truncate(DAT, tell(DAT));
close(DAT);
#▲ここまで追加▲
# リロード
-- 途中省略 --
#-------------------------------------------------
# 時間取得
#-------------------------------------------------
sub get_time {
local($date1,$date2,@w,@m);
$ENV{'TZ'} = "JST-9";
local($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
# 日時のフォーマット
$date1 = sprintf("%04d/%02d/%02d(%s) %02d:%02d",
$year+1900,$mon+1,$mday,$w[$wday],$hour,$min);
$date2 = sprintf("%s, %02d %s %04d %02d:%02d:%02d",
$w[$wday],$mday,$m[$mon],$year+1900,$hour,$min,$sec) . " +0900";
$date3 = sprintf("%04d",$year+1900); ## ←★追加
return ($date1, $date2);
}
●body.txt
────────────────────────────
受付番号 : $count2
送信日時 : $date
ブラウザ : $agent
ホスト名 : $host
────────────────────────────
記事No | : 2979 |
投稿日 | : 2008/02/24(Sun) 00:07:20 |
タイトル | : Re^2: postmail に通し番号を入れるには? |
ID情報 | : hp2tour |
投稿者 | : Shun |
BAL様
完璧です! ご提案いただいた改造点のなかでいじったのは一か所のみ。
$subject="$subject:$count2";
のコロンをスペースに変更したら件名での文字化けも解消しました。 この一週間、本業を早めに切り上げ毎晩あれこれ試してみましたが自力では一向に埒があかず、こちらへ投稿したところ、過去ログでもあちこちでお名前をお見かけしたBAL様より直々にご教授頂き見事問題解決することが出来ました。 心よりお礼を申し上げます。 今後とも一層のご活躍をお祈りしています。 それでは、本当にありがとうございました。
記事No | : 2994 |
投稿日 | : 2008/02/26(Tue) 08:03:02 |
タイトル | : Re^3: postmail に通し番号を入れるには? |
ID情報 | : dd77dd |
投稿者 | : ひよこ |
URL | : http://www.chaponay.com/victoria/sissi.cgi |
BALさん、わたしも この方法で解決致しました!(他者から設置を依頼された)
完璧です! わたしからも、有難うございますm(_ _)m
あ〜 遅刻しそうだ〜!! 本業(仕事)ヘ行ってきまーす!
> BAL様
>
> 完璧です! ご提案いただいた改造点のなかでいじったのは一か所のみ。
>
> $subject="$subject:$count2";
>
> のコロンをスペースに変更したら件名での文字化けも解消しました。 この一週間、本業を早めに切り上げ毎晩あれこれ試してみましたが自力では一向に埒があかず、こちらへ投稿したところ、過去ログでもあちこちでお名前をお見かけしたBAL様より直々にご教授頂き見事問題解決することが出来ました。 心よりお礼を申し上げます。 今後とも一層のご活躍をお祈りしています。 それでは、本当にありがとうございました。