アプリ版:「スタンプのみでお礼する」機能のリリースについて

ホームページ上に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";

よろしくお願いします。

A 回答 (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を使いまわし出来ますし、受信側で振り分けも出来ます。
    • good
    • 0
この回答へのお礼

ご回答いただき、ありがとうございます。

mailform.cgiに以下の内容を追記しました。メールフォームからの問い合わせをメールソフトが受信すると、件名に「お問い合わせが届いています」と表示されるようになりました。

$subject = 'お問い合わせが届いています';

ありがとうございます。

お礼日時:2014/05/03 15:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!