こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

メールフォームの作成(sendmail)

現在cgiでメールフォームを作成しています。
sendmail使用、ファイルのエンコーディングはShift_JIS、改行コードLF

htmlのフォームから情報を入力し、
perlで入力内容の確認、
cgiでメール送信までは実行できました。

他の項目(件名やメールアドレスなど)はメール内容に反映されているのですが、
本文のみ空白となってしまいます。

本文に関わるコードは下記になります。
use CGI;
$cgi = new CGI();
$maintxt = $cgi->param('maintxt');
$cgi->charset('Shift_JIS');
$maintxt = $cgi->escapeHTML($maintxt);
&jcode::convert(\$maintxt,'jis');
print MAIL "Content-Type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "$maintxt\n";

cgiは勉強中なもので、解決方法がお分かりの方がいらっしゃいましたら、
教えていただければ幸いです。

投稿日時 - 2012-07-29 00:43:16

QNo.7615866

すぐに回答ほしいです

質問者が選んだベストアンサー

おそらく、ヘッダーと本文の区切りの空行が出力されていないからでしょう。
「print MAIL "$maintxt\n";」の行の前に「print MAIL "\n";」を追加すればよいかと。


ちなみに、提示されているロジックより前の方で

 open (MAIL, "| sendmailのパスとオプション") ・・・

とやっていると思いますが、デバグ時には一時的に

 open (MAIL, "> デバグ用のファイル") ・・・

の様にしてファイルに出力してやると確認が楽です。

投稿日時 - 2012-07-29 09:08:03

補足

check_inquiry.plで内容確認を通さずにsendmail.cgiにactionのパスを指定すると解決しました。
plの方は後々調整したいと思います。

投稿日時 - 2012-07-30 01:10:52

お礼

ご回答ありがとうございます。非常に助かりました。
print MAIL "\n";
print MAIL "本文テスト";
と記述することで本文の出力が確認できました。

デバグ時には、教えていただいたことを参考にテストしていきたいと思います。


print MAIL "本文テスト"を print MAIL "$maintxt\n";とすると内容は出力されませんでした。
plでの入力内容確認画面では$maintxtをフォームから読み込めているのですが、sendmail.cgiの方では呼び出せていないのでしょうか…
もし原因がお分かりでしたらご回答いただければ幸いです。

投稿日時 - 2012-07-29 13:38:21

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問