Under-Construction
CGIの作り方>mailto

mailto

最終更新 (2002/01/26)

とりあえず、汎用のメール送信CGIでもつくっとこかな、と思って作りました。 かなり汎用性を持たせてあるので、各種アンケートなどにもそのまま使えます。

ページ下部のアンケートも、この mailto.cgi を使ってます。

機能


ポイント

短いプログラムなので、下に全リストを示します。
jcode.pl をrequire
漢字コード変換します。今回は全て ISO-2022-JP(jis)に統一。
メールの宛て先
@ は必ずエスケープします。
応答としては、Location:
メールを送ったあとは元のページを表示します。

ソースリスト


#!/bin/perl

require './jcode.pl';

$MAIL_TO = "xxx\@xxx.example.com";
$MAIL_FROM = "xxx\@xxx.example.com";

$addr = $ENV{'REMOTE_ADDR'};
$host = $ENV{'REMOTE_HOST'};
if (($host eq "") || ($host eq $addr)) {
  $ENV{'REMOTE_HOST'} = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}

foreach $env (keys %ENV){
  $log_all .= "$env = $ENV{$env}\n";
}
$log_all .= "\n";

# PARSE INPUT
if ($ENV{'REQUEST_METHOD'} eq "POST"){
  read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
  $buf = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buf);
foreach $pair (@pairs){
  ($key, $value) = split(/=/, $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  &jcode'convert(*value, 'jis');
  $ARG{$key} = $value;
  push(@ARG_LIST, $key);
}

$content = <<"CONTENT";

REMOTE_HOST: $ENV{'REMOTE_HOST'}
REMOTE_ADDR: $ENV{'REMOTE_ADDR'}
HTTP_ACCEPT: $ENV{'HTTP_ACCEPT'}
HTTP_USER_AGENT: $ENV{'HTTP_USRE_AGENT'}
HTTP_REFERER: $ENV{'HTTP_REFERER'}

CONTENT

foreach $item (@ARG_LIST){
  $content .= "$item: $ARG{$item}\n";
}

use Mail::Sendmail;

$mail{'Sender'} = $MAIL_FROM;
$mail{'Subject'} = $ARG{'Subject'} if ($ARG{'Subject'});
$mail{'To'} = $MAIL_TO;
$mail{'Body'} = $content;
$mail{'Content-type'} = "text/plain; charset=ISO-2022-JP";

sendmail(%mail);

$content =~ s/\n/
\n/g; print "Location: $ENV{'HTTP_REFERER'}\n\n";


リンクは歓迎です。断りなく、自由に行っていただいてかまいません。


近藤靖浩