|
#!/usr/local/bin/perl # 初期設定 -----------------------------------------------# # # sendmailへのパス # $sendmail = '/usr/lib/sendmail'; # # jcode.plへのパス # $jcode = './jcode.pl'; # # メールの送付先 # $to = 'zzzz@xxxxxx.xx.xx'; # # メールの題名 # $subject = 'CGIメール送信サンプル'; # # 確認ページより戻るでリンクされるURLを指定 # $back = 'http://www.site-cooler.com/'; # 処理開始 -------------------------------------# # //////////////////////////////////////////////# # 事前処理 # //////////////////////////////////////////////# # 文字コードライブラリの読込み require $jcode; # //////////////////////////////////////////////# # QUERY復元処理 # //////////////////////////////////////////////# if($ENV{REQUEST_METHOD} eq "POST"){ read(STDIN,$input,$ENV{CONTENT_LENGTH}); } else { $input = $ENV{QUERY_STRING}; } foreach ( split('&', $input ) ){ ($name, $value) = split('=',$_,2); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $html{$name} = $query{$name} = $value; } # //////////////////////////////////////////////# # 送信データの作成 # //////////////////////////////////////////////# # ---------- 送信者氏名 ---------- # if ($query{name}){ $mail_body = "\n《 お名前 》\n$query{name}\n"; } # ---------- メールアドレス ---------- # if ($query{mail}){ $mail_body .= "\n《 メールアドレス 》\n$query{mail}\n"; } # ---------- URL ---------- # if ($query{url}){ $mail_body .= "\n《URL 》\n$query{url}\n"; } # ---------- コメント ---------- # if ($query{comment}){ $mail_body .= "\n《 コメント 》\n$query{comment}\n"; } # //////////////////////////////////////////////# # MAIL送信 # //////////////////////////////////////////////# &jcode'convert(*mail_body,'jis'); &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t") || &error_exit("sendmailの起動に失敗しました"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $query{mail}\n"; print MAIL "Subject: $subject\n"; # 本文出力 print MAIL "$mail_body\n"; close(MAIL) || &error_exit("メールの送信に失敗しました"); # //////////////////////////////////////////////# # HTML出力 # //////////////////////////////////////////////# print "Content-type: text/html\n\n"; print '<HTML><HEAD>'."\n"; print '<TITLE>送信完了</TITLE>'."\n"; print '</HEAD><BODY>'."\n"; print '<P>'."\n"; print '<CENTER><H2>正常のに送信しました。</H2></CENTER>'."\n"; print '</P>'."\n"; print '<DIV ALIGN="right"><H3>'; print '<A HREF="' .$back. '">戻る</A>'; print '</H3></DIV>'."\n"; print '</BODY></HTML>'."\n"; exit; # //////////////////////////////////////////////# # サブルーチンの定義 # //////////////////////////////////////////////# # エラー処理------------------------------------# sub error_exit { print "Content-type: text/html\n\n"; print '<HTML><HEAD>'."\n"; print '<TITLE>Error Request</TITLE>'."\n"; print '</HEAD><BODY>'."\n"; print '<P>'."\n"; print '<CENTER><H2>'.$_[0].'</H2></CENTER>'."\n"; print '</P>'."\n"; print '<DIV ALIGN="right"><H3>'; print '<A HREF="javascript:history.back()">戻る</A>'; print '</H3></DIV>'."\n"; print '</BODY></HTML>'."\n"; exit; } |
| 初期設定 |
|
if($ENV{REQUEST_METHOD} eq "POST"){ read(STDIN,$input,$ENV{CONTENT_LENGTH}); } else { $input = $ENV{QUERY_STRING}; } |
|
&jcode'convert(*mail_body,'jis'); &jcode'convert(*subject,'jis'); |
| open(MAIL,"| $sendmail -t") |
|
print MAIL "To: $to\n"; print MAIL "From: $query{mail}\n"; print MAIL "Subject: $subject\n"; |
|
print MAIL "$mail_body\n"; close(MAIL) || &error_exit("メールの送信に失敗しました"); |
|
# 名前------------------------------------------# if(!$query{name}) { &error_exit("名前が入力されていません。"); } # メールアドレス--------------------------------# if(!$query{mail}) { &error_exit("メールアドレスが入力されていません。"); } # コメント--------------------------------------# if(!$query{comment}) { &error_exit("コメントが入力されていません。"); } |
|
if(!$query{*****}) { &error_exit("***が入力されていません。"); } |
|
# メールアドレスの形式確認----------------------# if($query{mail} !~ /.+\@.+\..+/ || /,/){ &error_exit("メールアドレスの書式が不正です"); } |
|
# ---------- ピリオドだけの行を無くす ---------- # $mail_body =~ s/\x0D\x0A|\x0D|\x0A/\n/g; $mail_body =~ s/(\n)\.(\n)/\1\.\.\2/g; |
|
#!/usr/local/bin/perl # 初期設定 -----------------------------------------------# # # sendmailへのパス # $sendmail = '/usr/lib/sendmail'; # # jcode.plへのパス # $jcode = './jcode.pl'; # # メールの送付先 # $to = 'zzzzz@xxxxxx.xx.xx'; # # メールの題名 # $subject = 'CGIメール送信サンプル'; # # 確認ページより戻るでリンクされるURLを指定 # $back = 'http://www.site-cooler.com/'; # # 呼出し元。チェックする時はhttpから始まるURLを指定 # $referrer = ''; # 処理開始 -------------------------------------# # //////////////////////////////////////////////# # 事前処理 # //////////////////////////////////////////////# # 文字コードライブラリの読込み require $jcode; # 呼出し元の確認 if(!(!$referrer || $referrer eq $ENV{HTTP_REFERER})){ &error_exit("呼出し元が不正です"); } # //////////////////////////////////////////////# # QUERY復元処理 # //////////////////////////////////////////////# if($ENV{REQUEST_METHOD} eq "POST"){ read(STDIN,$input,$ENV{CONTENT_LENGTH}); } else { $input = $ENV{QUERY_STRING}; } foreach ( split('&', $input ) ){ ($name, $value) = split('=',$_,2); $value =~ s/\+/ /g; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $html{$name} = $query{$name} = $value; } # //////////////////////////////////////////////# # 入力データのチェック # //////////////////////////////////////////////# # 名前------------------------------------------# if(!$query{name}) { &error_exit("名前が入力されていません。"); } # メールアドレス--------------------------------# if(!$query{mail}) { &error_exit("メールアドレスが入力されていません。"); } # コメント--------------------------------------# if(!$query{comment}) { &error_exit("コメントが入力されていません。"); } # メールアドレスの形式確認----------------------# if($query{mail} !~ /.+\@.+\..+/ || $query{mail} =~ /,/){ &error_exit("メールアドレスの書式が不正です"); } # //////////////////////////////////////////////# # 送信・表示データの作成 # //////////////////////////////////////////////# # # 表示用データのデコード # &decode(\%html); # ---------- 送信者氏名 ---------- # if ($query{name}){ $mail_body = "\n《 お名前 》\n$query{name}\n"; $html_body = "<DT>《 お名前 》<BR>\n"; $html_body .= "<DD>$html{name}<BR><BR>\n"; } # ---------- メールアドレス ---------- # if ($query{mail}){ $mail_body .= "\n《 メールアドレス 》\n$query{mail}\n"; $html_body .= "<DT>《 メールアドレス 》<BR>\n"; $html_body .= "<DD>$html{mail} <BR><BR>\n"; } # ---------- URL ---------- # if ($query{url}){ $mail_body .= "\n《URL 》\n$query{url}\n"; $html_body .= "<DT>《 URL 》<BR>\n"; $html_body .= "<DD>$html{url}<BR><BR>\n"; } # ---------- コメント ---------- # if ($query{comment}){ $mail_body .= "\n《 コメント 》\n$query{comment}\n"; $html_body .= "<DT>《 コメント 》<BR>\n"; $html_body .= "<DD>$html{comment}<BR><BR>\n"; } # ---------- ピリオド1つだけの行を無くす ---------- # $mail_body =~ s/\x0D\x0A|\x0D|\x0A/\n/g; $mail_body =~ s/(\n)\.(\n)/\1\.\.\2/g; # //////////////////////////////////////////////# # MAIL送信 # //////////////////////////////////////////////# &jcode'convert(*mail_body,'jis'); &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t") || &error_exit("sendmailの起動に失敗しました"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $query{mail}\n"; print MAIL "Subject: $subject\n"; # 本文出力 print MAIL "$mail_body\n"; close(MAIL) || &error_exit("メールの送信に失敗しました"); # //////////////////////////////////////////////# # HTML出力 # //////////////////////////////////////////////# &jcode'convert(*subject,'sjis'); &jcode'convert(*html_body,'sjis'); print "Content-type: text/html\n\n"; print '<HTML><HEAD>'."\n"; print '<TITLE>送信完了</TITLE>'."\n"; # ---------- 本文の開始 ---------- # print '</HEAD><BODY>'."\n"; print '<BLOCKQUOTE>'."\n"; print '<DIV ALIGN="left"><H2>次の内容で正常に送信しました。</H2>'."\n"; print '<BR><HR><BR>'."\n"; print '<DL>'."\n"; print $html_body ; print '</DL>'."\n"; print '<BR><HR><BR>'."\n"; print '<DIV ALIGN="right"><H3>'; print '<A HREF="' .$back. '">戻る</A>'; print '</H3></DIV>'."\n"; print '</BLOCKQUOTE>'."\n"; print '</BODY></HTML>'."\n"; # //////////////////////////////////////////////# # サブルーチンの定義 # //////////////////////////////////////////////# # エラー処理------------------------------------# sub error_exit { print "Content-type: text/html\n\n"; print '<HTML><HEAD>'."\n"; print '<TITLE>Error Request</TITLE>'."\n"; print '</HEAD><BODY>'."\n"; print '<P>'."\n"; print '<CENTER><H2>'.$_[0].'</H2></CENTER>'."\n"; print '</P>'."\n"; print '<DIV ALIGN="right"><H3>'; print '<A HREF="javascript:history.back()">戻る</A>'; print '</H3></DIV>'."\n"; print '</BODY></HTML>'."\n"; exit; } # デコード処理----------------------------------# sub decode { $tmp = shift; foreach $key ( keys( %$tmp ) ) { $$tmp{$key} =~ s/\&/\&/g; $$tmp{$key} =~ s/</\</g; $$tmp{$key} =~ s/>/\>/g; $$tmp{$key} =~ s/"/\"e;/g; $$tmp{$key} =~ s/\x0D\x0A|\x0D|\x0A/<BR>/g; } } |
|
# # 呼出し元。チェックする時はhttpから始まるURLを指定 # $referrer = ''; if(!(!$referrer || $referrer eq $ENV{HTTP_REFERER})){ &error_exit("呼出し元が不正です"); } |
|
$html{$name} = $query{$name} = $value; |
|
&decode(\%html); # デコード処理----------------------------------# sub decode { $tmp = shift; foreach $key ( keys( %$tmp ) ) { $$tmp{$key} =~ s/\&/\&/g; $$tmp{$key} =~ s/</\</g; $$tmp{$key} =~ s/>/\>/g; $$tmp{$key} =~ s/"/\"e;/g; $$tmp{$key} =~ s/\x0D\x0A|\x0D|\x0A/<BR>/g; } } |
| HTML出力 |
|
public_html 《トップディレクトリ》 ┃ ┗ sendmail ┃ ┣ sendmail.cgi [755] ┣ sendmail.htm ┗ jcode.pl |