From: rubikitch@... Date: 2010-01-06T14:16:08+09:00 Subject: [ruby-list:46740] Re: $B%R%"%I%-%e%a%s%HFb$NJQ(B$B?tE83+$,@5>o$K9T$o$l$J$$(B From: ShingoKintaka Subject: [ruby-list:46739] Re: ヒアドキュメント内の変数展開が正常に行われない Date: Wed, 6 Jan 2010 13:32:43 +0900 > るびきちさん、書き込みありがとうございます。 > プログラムを記入します。 > 下記のcgiをhtmlファイルに記述されているformのactionで呼び出しております。 前のメールで省略された部分に原因がありました。 > name_kanji = @NameKanji.toeuc > message =<<-"EOF" > 原因はここです。 toXXXメソッドは文字コードを推測するため、短すぎる文字列は正しく判定できないことがあります。 HTMLがEUC-JPならばスクリプトもEUC-JPにしたほうがいいと思います。 あるいは、スクリプトもHTMLもUTF-8に統一するか。 > inqmail = InquiryMail.new > inqmail.GetForm > inqmail.DataCheck > inqmail.SendMail > inqmail.TransmissionEndMessage あとはちょっとしたところで、Rubyでのメソッド名は単語を _ でつなげるスタイルをとります。 とりあえず、修正したスクリプトと実行結果はこんな感じ。 INJECTORはテストのためとりあえずcatにしています。 #!/usr/local/bin/ruby187 -Ku # -*- coding: utf-8 -*- #=問合せフォームによるメール配信 # # Authors:: Shingo Kintaka # Version:: 1.0 2010-01-02 S.Kintaka # Copyright:: Copyright (C) S.Kintaka , 2006. All rights reserved. # 問合せフォームの値を取得し、メール本文に情報を記述して送信する。 #==開発履歴 # K20100102_00 新規開発 require "cgi" # CGIクラス require 'kconv' # 漢字コード変換用 require "net/smtp" # FROM_ADDR = "InquiryForm@foo-bar.jp" TO_ADDR = "myaddress@foo.bar.jp" SUBJECT = "御客様からの問合せ" #INJECTOR = "/usr/sbin/sendmail -i -t" INJECTOR = "cat > /tmp/mail" # テスト用 # #= お問い合わせフォームからパラメータを取得しメールで送信する # class InquiryMail # アクセサメソッド attr_accessor :InquiryCommodity # お問い合わせ商品 attr_accessor :ContentOfInquiry # お問い合わせ内容 attr_accessor :NameKana # お名前(カナ) attr_accessor :NameKanji # お名前(漢字) attr_accessor :TelephoneNumber # 電話番号 attr_accessor :EmailAddress # E-Mailアドレス attr_accessor :ZipCode # 郵便番号 attr_accessor :AdministrativeDivisions # 都道府県 attr_accessor :LocalAuthorityCounty # 市町村郡 attr_accessor :HouseNumber # 番地 # # initialize # def initialize @cgi = CGI.new end # # フォーム情報を取得する # def get_form @InquiryCommodity = @cgi["InquiryCommodity"] # お問い合わせ商品 @ContentOfInquiry = @cgi["ContentOfInquiry"] # お問い合わせ内容 @NameKana = @cgi["NameKana"] # お名前(カナ) @NameKanji = @cgi["NameKanji"] # お名前(漢字) @TelephoneNumber = @cgi["TelephoneNumber"] # 電話番号 @EmailAddress = @cgi["EmailAddress"] # E-Mailアドレス @ZipCode = @cgi["ZipCode"] # 郵便番号 @AdministrativeDivisions = @cgi["AdministrativeDivisions"] # 都道府県 @LocalAuthorityCounty = @cgi["LocalAuthorityCounty"] # 市町村郡 @HouseNumber = @cgi["HouseNumber"] # 番地 end # # 入力データのチェック # def data_check # print @InquiryCommodity , "
" # print @ContentOfInquiry , "
" # print @NameKana , "
" # print @NameKanji , "
" # print @TelephoneNumber , "
" # print @EmailAddress , "
" # print @ZipCode , "
" # print @AdministrativeDivisions , "
" # print @LocalAuthorityCounty , "
" # print @HouseNumber , "
" # 必須項目をチェックして正しければtrueを返し、間違って入ればfalseを 返す。 end # # メール配信 # def send_mail mail = <"text/html", "charset"=>"euc-jp") { name_kanji = @NameKanji <<-"EOF".toeuc お問合せフォーム #{name_kanji}様
御問い合わせありがとうございました。

内容を確認後、#{name_kanji}様宛のメール#{@EmailAddress}に返信 させて頂きます。
※返信は2〜6営業日以内とさせて頂きます。

TOPページに戻る EOF } end # # エラー処理 # def error_cgi print "*** CGI Error List ***
" print "#{CGI.escapeHTML($!.inspect)}
" $@.each { |x| print CGI.escapeHTML(x), "
" } end end # # MainProgram # if __FILE__ == $0 begin inqmail = InquiryMail.new inqmail.get_form inqmail.data_check inqmail.send_mail inqmail.transmission_end_message rescue inqmail.error_cgi end end $ curl --data InquiryCommodity=1 --data ContentOfInquiry=2 --data NameKana=kana --data NameKanji=漢字 --data TelephoneNumber=021 --data EmailAddress=hogehoge@example.org --data ZipCode=12345 --data AdministrativeDivisions=Tokyo --data LocalAuthorityCounty=hoge --data HouseNumber=133 http://localhost:9998/testmail.cgi 2&> /dev/null | nkf -w お問合せフォーム 漢字様
御問い合わせありがとうございました。

内容を確認後、漢字様宛のメールhogehoge@example.orgに返信 させて頂きます。
※返信は2〜6営業日以内とさせて頂きます。

TOPページに戻る $ nkf -w /tmp/mail From: InquiryForm@foo-bar.jp To: myaddress@foo.bar.jp Subject: 御客様からの問合せ MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP ○御客様問合せ商品 1 ○お客様問合せ内容 2 ○お名前(カナ) kana ○お名前(漢字) 漢字 ○電話番号 021 ○メールアドレス hogehoge@example.org ○郵便番号 12345 ○都道府県名 Tokyo ○市町村郡 hoge ○番地 133 $ nkf --guess /tmp/mail ISO-2022-JP -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/ Twit: http://twitter.com/rubikitch/ 『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook