新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mxa.meshnet.or.jp>
Subject: Re: CGIを使ってメールを送る方法教えてください
Date: 1996/07/04 22:20:48
Reference: mesh.program/00012

7月4日に、naokiさんは書きました。

>7月8日よりプロバイダーのサービスを開始することになったのですが、
>お客さんの中にフォームを使ってその内容をメールに送って欲しいという
>要望があったのですが、簡単にaction=maito:でやろうとすると文字化けしてしまうので
>CGIを積極的に使ってやりたいなーと思っているのですがなんとかお力貸してください。
>
少々苦言を述べます。

個人でホームペエヂを立ち上げている方がこの様な質問をなさるのなら何の不思議も
ありませんが、いやしくもプロバイダのサーヴィスをしようと言う方が、CGIでメイルを
出す方法を聞いているのでは、チョット調査不足も甚だしいのでは?

漢字で書かれたフォームの内容をメイルすると言うのは、ある意味 CGI 利用の第一歩
でもあるので、どこにでも参考になるものはあるでしょうし、別に自分で書いても
大変なものでも無いでしょう。

もちろん、道具を選ぶ必要はあります。例えば文字列処理に perl を使い、漢字変換に
nkf を使い、メイルの送出に sendmail を使うことにすれば簡単でしょう。

ご健闘を祈ります。


と、これだけでは、あまりに不親切ですか。(^^;;
もしかすると、これを読んでいる方の中に興味を覚えた人もいるかも知れませんので、
簡単に道筋を書いておきましょうか。

CGI に渡された引数から本文を取り出すのは良いですね。漢字は URL encode されて
渡されてきますから、まず、元の文章に戻します。$_ に本文が入っているなら、

tr/+/ /;
s/%([a-f0-9]{2})/pack("C", hex($1))/ieg;

だけで終わりです。

出来た本文の漢字コードはなんだか分かりませんから、インターネットメイルで送る
ためには JIS コードにしてやる必要があります。nkf に与えると同時にsendmailで
送ってしまえば簡単です。

open(OUTPUT, "| $nkf | $sendmail -n -t") || (エラー処理をする)
print OUTPUT <<"EOL";
From: $from_addr
To: $to_addr
Errors-To: $admin_addr
Subject: $subjest
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
(他にも必要なヘッダを書く)

$text
EOL
close(OUTPUT);

もちろん変数にはそれなりの値を設定してから使うことは言うまでもありません。
メイルアドレスもあらかじめチェックして、おかしな値だったらエラーにする必要も
ありますし、いわゆる半角かなを使われた時のために、nkf のヴァージョンは
新しいものを使って、半角かなを全角かなに変換するモードを使う、等など、
実際のスクリプトとして使うときには、いろいろ注意するところがあります。