
ホームページ上にCGIで動作するメールフォームを作成しました。実際にmailform.htmlとmailform.cgiをアップロードして、正常に送信先のメールアドレスにメールフォームの内容が送信されてきました。
しかし届いたメールの件名は(件名なし)と表示されます。 CGIプログラムに関してほとんど知識が無いので、mailform.html mailform.cgiはテンプレートを使用しています。
mailform.htmlの内容に件名を追加して、実際に届くメールに件名が表示されるようにするには、CGIファイルにどう記述すればよいでしょうか。
<mailform.htmlの内容>
<TABLE>
<TBODY>
<TR>
<TH nowrap>お問い合わせ内容</TH>
<TD colspan="2"><TEXTAREA name="Kansou" rows="5" cols="50"></TEXTAREA></TD>
</TR>
<TR>
<TH nowrap>お名前</TH>
<TD colspan="2"><INPUT name="Namae" size="50"></TD>
</TR>
<TR>
<TH nowrap>電子メール</TH>
<TD colspan="2"><INPUT name="Mail" size="50"></TD>
</TR>
<TR>
<TH nowrap>電話番号</TH>
<TD colspan="2"><INPUT name="Tel" size="50"></TD>
</TR>
<TR>
<TH nowrap></TH>
<TD align="center"><INPUT type="submit" value=" 送る "></TD>
<TD align="center"><INPUT type="reset" value=" リセット "></TD>
</TR>
</TBODY>
</TABLE>
<mailform.cgiの内容>
require 'jcode.pl';
#Get the input
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
#Split the name-value pairs
@pairs = split (/&/,$buffer);
foreach $pair(@pairs)
{
($name, $value) = split(/=/, $pair);
#Un-Webify plus signs and %-encoding
$value=~tr/+/ /;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = $value;
if ( $name ne "to" ) {
push (@fields, $name) unless (grep(/^$name$/, @fields));
}
}
#
### 送信フォーマット
#
$mail_msg = "";
foreach $field (@fields) {
$mail_msg = "$mail_msg-----------------------------------------------\n";
$mail_msg = "$mail_msg($field) $FORM{$field}\n";
}
$mail_msg = "$mail_msg-----------------------------------------------\n";
#
### ShiftJis to Jis
#
&jcode'convert(*mail_msg, 'jis');
open(MAIL,"| $mailprog $mailto")|| die "Can't open $mailprog!\n";
print MAIL $mail_msg;
close(MAIL);
#
### Make the person feel good for writing to us
#
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Thank you!</TITLE></HEAD>\n";
print "<BODY bgcolor=\"#9dffff\">\n";
print "<H2 align=\"center\">送信いただき、ありがとうございました!</H2>\n";
print "</BODY></HTML>\n";
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
MAIL も他のHTTPなどの通信と同じようにヘッダ部分と、空行を置いて本文になります。
ヘッダ部分に
To:
Subject:
From:
Reply-To:
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-2022-JP
は揃ってますか???受信メールのソースを確認すること
なお、基本的にiso-2022-jpで送信されますから、Subjectや差出人、あて先に日本語を含む場合は、Base64エンコードが必要です。それには、 MIME::Base64 モジュールの encode_base64を使用すると簡単で良いでしょう。
ちゃんとしたフォームメールCGIには、これらはすべて含まれているはずです。また、上記のスクリプトでは同名のハッシュは上書きされてしまいますよ。
ヘッダのSubject:については、カテゴリーを選択させて自動的にタイトルをつけさせるほうが良いです。CGIを使いまわし出来ますし、受信側で振り分けも出来ます。
ご回答いただき、ありがとうございます。
mailform.cgiに以下の内容を追記しました。メールフォームからの問い合わせをメールソフトが受信すると、件名に「お問い合わせが届いています」と表示されるようになりました。
$subject = 'お問い合わせが届いています';
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
apacheでPerl CGIが作動せず、5...
-
フォームを再送信しますか?
-
chatGPTみたいに画像生成出来る...
-
ChatGPTの性能は昔に比べて上が...
-
入力フォーム(電話番号)
-
ChatGPT
-
フォントを探しています
-
クッキーが別PCで共有されてしまう
-
iDeCo
-
皆さんはGUCCIはハイブランドだ...
-
cgi-binのエラー?
-
Trees掲示板CGI(CGI-Resque氏...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUN BBSの改造方法
-
perlで書いたcgiでsqliteの使い...
-
CGIを使ったメールフォーム
-
行数でなく内容を取得するには
-
cgiによる文字入力数の制限につ...
-
HDMLについて
-
perl ヒア文(print <<"EOM" ...
-
CGIのフォームメールで送信した...
-
匿メール機能にログ機能を追加...
-
日本語文字化け(GETメソッド?)
-
tracert ができない原因
-
文字って数字で表現・・・
-
電話番号を読み込むプログラム...
-
チェックボックスでのor検索
-
name属性をperlに引き継ぎたい
-
splitについて教えてください。
-
html文を書く時の print の中の...
-
ファイル名変更プログラム
-
アンケートの回答をcsv形式で保...
-
wordの数式について 定積分を書...
おすすめ情報