การส่งค่าผ่าน Mail ด้วย Form

ปรับปรุง : 2550-03-29 (เปลี่ยน isinthai)
การส่งค่าผ่าน Mail ด้วย Form
ประโยชน์ของวิธีนี้จะทำให้ท่าน ขายของผ่านเว็บ หรือจะรับขึ้นทะเบียนสมาชิกก็ได้นะครับ
หรือจะ apply เป็น E-Commerce อย่างง่าย ก็ได้ แม้มี homepage ฝากไว้ที่ไหน ก็ทำได้นะครับ
เรื่องนี้เป็นเรื่องง่าย น่าจะทำกันได้ ถ้ามีปัญหาขอได้ mail มาบอกว่า เว็บหน้าไหนมีปัญหา ผมจะช่วยแนะนำให้นะครับ
บริการ perl ใน server ของผม ได้จำกัด security ไว้สูง ผมจึงไม่สามารถเปิดบริการได้ .. พยายามเปิดแล้ว แต่ server จำกัดให้ใช้ใน server เท่านั้น
ถ้าท่านต้องการใช้บริการส่ง mail ของผม ให้เปลี่ยนจาก http://www.thaiall.com/cgi/formmail.pl เป็น http://www.isinthai.com/sndform.php

  1. ข้อควรทราบ
  2. ฟอร์มส่งค่าอย่างง่ายที่สุด เพราะส่งเพียงค่าเดียว (ต.ย.การเขียน FORM ใน HTML แบบที่ 1)
  3. ฟอร์มส่งค่าพร้อมลูกเล่น ที่ไม่ธรรมดา (ต.ย.การเขียน FORM ใน HTML แบบที่ 2)
  4. ฟอร์มส่งค่า comment ถึงเรา (ต.ย.การเขียน FORM ใน HTML แบบที่ 3)
  5. ฟอร์มส่งค่า แบบ E-Commerce (ต.ย.การเขียน FORM ใน HTML แบบที่ 4)
  6. วิธีขอยืมโปรแกรม perl ของ thaiall ไปใช้ สำหรับท่านที่ใช้ server ที่ไม่มีบริการ perl หรือ send mail
  7. โปรแกรม perl ที่ใช้ส่งข้อมูล ไปให้เราผ่าน mail
  8. แบบฝึกหัด
ข้อควรทราบ
  1. วิธีนี้ใช้โปรแกรม perl ตัวเดียว และไม่ค่อยมีปัญหามาก เพราะใช้บริการส่งข้อมูลผ่าน form ไปถึงเราด้วย mail ของ www.hypermart.net ซึ่งหมายความว่า homepage ที่ท่านเขียนควรอยู่ที่ hypermart ด้วย แต่ปัจจุบัน hypermart.net ปิดบริการ free webhosting ทำให้ผมต้องเปลี่ยนมาทดสอบใน thaiall.com ดังที่ท่านเห็น และบรรดา free webhosting ต่างก็จำกัดบริการส่ง mail จาก server ของพวกเขากันถ้วนหน้า
  2. การใช้งานนั้น ท่านจะต้องมีแฟ้ม 2 แฟ้ม คือแฟ้ม html ที่เก็บคำสั่ง form ไว้ป้อนค่า และ โปรแกรม perl ซึ่งแนะนำว่าน่าจะใช้ที่ server ของท่าน
  3. เมื่อสร้างฟอร์มที่รับค่าแล้ว ก็จะสั่ง submit ด้วย โปรแกรม perl เพียงเท่านี้ mail ที่มีข้อมูล ก็จะไปถึงเราได้ง่าย ๆ และรวดเร็ว
  4. โปรแกรม perl เช่น formmail.pl มักเก็บไว้ในห้อง cgi-bin แต่เวลาเรียกใช้ ต้องเรียกจากห้องที่ถูกต้อง เช่นเก็บไว้ในห้อง /cgi-bin/formmail.pl ก็ต้องเรียกใช้ตามนั้นให้ถูกต้อง
  5. บริการที่ผมได้เพิ่มเข้าไปใน formmail.pl คือเพิ่มส่วนของ <input type=hidden name=redirect value="http://www.yourhome.com"> ทำให้หลังจากส่ง mail แล้วจะไม่เห็นค้างที่คำว่า thank you ที่เขียนไว้ แต่จะไปเว็บที่ redirect ในเกือบทันที .. บริการนี้เพิ่มเข้าไปใหม่ครับ ซึ่ง tag ที่ใช้ในงานนี้คือ
      if (length($Form{'redirect'}) > 5) {
      print "<meta http-equiv='refresh' content='0; url=",$Form{'redirect'},"'>";
      }
  6. ถ้าท่านใช้ server ที่อื่นเก็บ homepage ของท่าน ก็สามารถใช้บริการ ซื้อ ขาย รับสมาชิก หรือรับ comment โดยใช้โปรแกรม perl ของ thaiall.com นี้ได้ แล้วช่วยเอา banner ไปติดด้วยนะครับ (Recommend ว่าวิธีนี้ง่าย และรวดเร็ว ท่านเพียงเขียน เฉพาะส่วน html ก็สามารถทำหน้าเว็บ E-Commerce ได้แล้วหละครับ)
  7. ถ้าที่สนใจ e-Commerce ผมมี source ให้ copy ฟรีที่ http://www.thaiabc.com/demo และท่านยังทดสอบบริการ ร้านค้านี้ด้วยตนเองได้

ฟอร์มส่งค่าอย่างง่ายที่สุด เพราะส่งเพียงค่าเดียว (แบบที่ 1)
จุดสำคัญที่สุดห้ามลืม เมื่อจะนำไปใช้ในการเขียน form คือ
แก้บรรทัดที่ 2 ที่มีคำว่า plsndfrm1@thaiall.com เป็น E-mail ของท่าน
ไม่งั้น ข้อความจาก form จะส่งมาถึงผม เพราะ recipient เป็นการกำหนดผู้รับ
ถ้าใส่เครื่องหมาย , ระหว่าง email จะส่งไปให้หลายคนได้ เช่น x@thaimail.com,y@chaiyo.com เป็นต้น


ฟอร์มข้างบนนี้มีวิธีเขียนดังนี้
<form method=post action="http://www.thaiall.com/cgi/formmail.pl">
<input type=hidden name=recipient value="youremail@thaiall.com">
<input type=text name=name size=20><br>
<input type=submit value=SEND>
<input type=reset value=RESET>
</form>
Click เพื่อเรียกเฉพาะ FORM แบบเต็มจอ

ฟอร์มส่งค่าพร้อมลูกเล่น ที่ไม่ธรรมดา (แบบที่ 2)
จุดสำคัญที่สุดห้ามลืม เมื่อจะนำไปใช้ในการเขียน form คือ
แก้บรรทัดที่ 2 ที่มีคำว่า plsndfrm2@thaiall.com เป็น E-mail ของท่าน
ไม่งั้น ข้อความจาก form จะส่งมาถึงผม เพราะ recipient เป็นการกำหนดผู้รับ
ถ้าใส่เครื่องหมาย , ระหว่าง email จะส่งไปให้หลายคนได้ เช่น x@thaimail.com,y@chaiyo.com เป็นต้น

Male
Female
คิดภาษี
ส่วนลด


ฟอร์มข้างบนนี้มีวิธีเขียนดังนี้
    <form method=post action="http://www.thaiall.com/cgi/formmail.pl"> <input type=hidden name=recipient value="plsndfrm2@thaiall.com"> <input type=text name=name size=20><br> <input type=radio name=sex value=male checked> Male<br> <input type=radio name=sex value=female> Female<br> <input type=checkbox name=tax checked> คิดภาษี<br> <input type=checkbox name=discount> ส่วนลด<br> <SELECT NAME=province SIZE=3> <OPTION VALUE=lampang selected> ลำปาง <OPTION VALUE=bangkok> กรุงเทพ <OPTION VALUE=chiengmai> เชียงใหม่ <OPTION VALUE=chiengrai> เชียงราย <OPTION VALUE=ubon> อุบลราชธานี </SELECT><br> <input type=submit value=SEND> <input type=reset value=RESET> </form>
Click เพื่อเรียกเฉพาะ FORM แบบเต็มจอ

ฟอร์มส่งค่า comment ถึงเรา (แบบที่ 3)
จุดสำคัญที่สุดห้ามลืม เมื่อจะนำไปใช้ในการเขียน form คือ
แก้บรรทัดที่ 2 ที่มีคำว่า plsndfrm3@thaiall.com เป็น E-mail ของท่าน
ไม่งั้น ข้อความจาก form จะส่งมาถึงผม เพราะ recipient เป็นการกำหนดผู้รับ
ถ้าใส่เครื่องหมาย , ระหว่าง email จะส่งไปให้หลายคนได้ เช่น x@thaimail.com,y@chaiyo.com เป็นต้น


ฟอร์มข้างบนนี้มีวิธีเขียนดังนี้
<form method=post action="http://www.thaiall.com/cgi/formmail.pl">
<input type=hidden name=recipient value="testplsndfrm3@thaiall.com">
<input type=text name=name size=20><br>
<textarea name=message cols=30 rows=5 wrap=vitual>
hello friend
</textarea>
<input type=submit value=SEND>
<input type=reset value=RESET>
</form>
Click เพื่อเรียกเฉพาะ FORM แบบเต็มจอ

ฟอร์มส่งค่า แบบ E-Commerce (แบบที่ 4)
จุดสำคัญที่สุดห้ามลืม เมื่อจะนำไปใช้ในการเขียน form คือ
แก้บรรทัดที่ 2 ที่มีคำว่า plsndfrm4@thaiall.com เป็น E-mail ของท่าน
ไม่งั้น ข้อความจาก form จะส่งมาถึงผม เพราะ recipient เป็นการกำหนดผู้รับ
ถ้าใส่เครื่องหมาย , ระหว่าง email จะส่งไปให้หลายคนได้ เช่น x@thaimail.com,y@chaiyo.com เป็นต้น
    ตัวอย่าง E-Commerce ของร้าน thaiall.com จิปาถะ
    ชื่อ-สกุลของผู้ซื้อ :
    E-Mail ของผู้ซื้อ :
    แบบของการซื้อ :
    ทดสอบระบบดูก่อน ยังไม่พร้อมจะซื้อจริง
    ซื้อจริงและให้ยืนยันผ่านE-Mail
    ซื้อจริงแต่ขอทราบรายละเอียดเพิ่ม
    ซื้อจริงและต้องการต่อรอง
    รายการสินค้าที่บริษัทจำหน่าย :
    คอมพิวเตอร์ spec ล่าสุด 25,000 บาท พร้อมชุด multimedia
    รถยนต์มือ 2 สภาพดีเยี่ยม ราคา 50% ของรถใหม่ มีทุกยี่ห้อที่นิยมใช้กัน
    บ้านพร้อมที่ดิน ราคา 800,000 บาทขึ้นไป อยู่ติด ศาลากลางทุกจังหวัด
    จำหน่าย MS Windows 2000 ราคามาตรฐาน พร้อมติดตั้งทุกจังหวัด
    จำหน่าย MS Office 2000 ราคามาตรฐาน พร้อมติดตั้ง ทุกจังหวัด
    งบประมาณขั้นต่ำที่ท่านมีให้กับรายการซื้อชุดนี้ :
    วิธีการส่งสินค้า :
    แบบของการชำระเงิน : บัตรเครดิต เงินสดเมื่อได้รับของ พัสดุเก็บเงินปลายทาง อื่นตามแต่ตกลง
    เลขที่บัตรเครดิต(ถ้ามี) : เดือนปีที่บัตรหมดอายุ(ถ้ามี) :
    ที่อยู่ลูกค้า :

    รายละเอียดเกี่ยวกับสินค้าที่ท่านต้องการ(เพิ่มเติมในรายละเอียด) :

    หมายเหตุ :


ฟอร์มข้างบนนี้มีวิธีเขียนดังนี้
    <form method=post action="http://www.thaiall.com/cgi/formmail.pl"> <input type=hidden name=recipient value="plsndfrm4@thaiall.com"> <b>ชื่อ-สกุลของผู้ซื้อ :</b> <input type=text name=name size=40><br> <b>E-Mail ของผู้ซื้อ :</b> <input type=text name=email size=20><br> <b>แบบของการซื้อ :</b><br> <input type=radio name=tsell value=test checked> ทดสอบระบบดูก่อน ยังไม่พร้อมจะซื้อจริง<br> <input type=radio name=tsell value=confirmonmail> ซื้อจริงและให้ยืนยันผ่านE-Mail<br> <input type=radio name=tsell value=wantdetail> ซื้อจริงแต่ขอทราบรายละเอียดเพิ่ม<br> <input type=radio name=tsell value=wanttotalk> ซื้อจริงและต้องการต่อรอง<br> <b>รายการสินค้าที่บริษัทจำหน่าย :</b><br> <input type=checkbox name=computer checked> คอมพิวเตอร์ spec ล่าสุด 25,000 บาท พร้อมชุด multimedia<br> <input type=checkbox name=car> รถยนต์มือ 2 สภาพดีเยี่ยม ราคา 50% ของรถใหม่ มีทุกยี่ห้อที่นิยมใช้กัน<br> <input type=checkbox name=home> บ้านพร้อมที่ดิน ราคา 800,000 บาทขึ้นไป อยู่ติด ศาลากลางทุกจังหวัด<br> <input type=checkbox name=mswindows2000> จำหน่าย MS Windows 2000 ราคามาตรฐาน พร้อมติดตั้งทุกจังหวัด<br> <input type=checkbox name=office2000> จำหน่าย MS Office 2000 ราคามาตรฐาน พร้อมติดตั้ง ทุกจังหวัด<br> <b>งบประมาณขั้นต่ำที่ท่านมีให้กับรายการซื้อชุดนี้ :</b> <input type=text name=min size=20><br> <b>วิธีการส่งสินค้า :</b> <SELECT NAME=province> <OPTION VALUE=mail selected> ให้จัดส่งทางไปรษณีย์ <OPTION VALUE=atcompany> จะไปรับที่บริษัทของ thaiall.com <OPTION VALUE=bycompany> ให้บริษัทนำมาส่งที่สำนักงานของลูกค้าเอง <OPTION VALUE=bysender> ให้จ้างบริษัทขนส่ง เฉพาะกิจส่งมาให้ </SELECT><br> <b>แบบของการชำระเงิน :</b> <input type=radio name=pay value=creditcard checked> บัตรเครดิต <input type=radio name=pay value=cash> เงินสดเมื่อได้รับของ <input type=radio name=pay value=mail> พัสดุเก็บเงินปลายทาง <input type=radio name=pay value=other> อื่นตามแต่ตกลง<br> <b>เลขที่บัตรเครดิต(ถ้ามี) :</b> <input type=text name=crdnum size=16> <b>เดือนปีที่บัตรหมดอายุ(ถ้ามี) :</b> <input type=text name=crdoutofdate size=5><br> <b>ที่อยู่ลูกค้า :</b><br> <textarea name=addr cols=40 rows=5></textarea><br> <b>รายละเอียดเกี่ยวกับสินค้าที่ท่านต้องการ(เพิ่มเติมในรายละเอียด) :</b><br> <textarea name=productdetail cols=40 rows=5 wrap=vitual></textarea><br> <b>หมายเหตุ :</b><br> <textarea name=remark cols=40 rows=5></textarea><br> <input type=submit value=ยืนยัน(Confirm)> <input type=reset value=ยกเลิก(Cancel)> </form>
Click เพื่อเรียกเฉพาะ FORM แบบเต็มจอ

วิธีขอยืมโปรแกรม perl ของ thaiall ไปใช้
วิธีนี้ ท่านไม่ต้องเขียน perl เป็นก็ใช้ได้ครับ
เพียงแต่สร้าง form ใน html ของท่าน เก็บไว้ที่ server ของท่าน
ผมเขียนตัวอย่างให้ดู 3 โปรแกรมข้างบนนี้แล้ว (ต.ย.ธรรมดา , ต.ย.ไม่ธรรมดา , ต.ย.comment , ต.ย.E-Commerce)
ท่านสามารถ apply ไปใช้ ทำฟอร์ม ขายของ รับสมาชิก หรือรับ comment ก็ได้
หรือท่านจะ save as ต.ย.3 comment ไปปรับปรุงแก้ไขก็ได้ โดยเฉพาะ recipient อย่าลืมแก้เป็น E-Mail ของท่าน
ท่านเพียงแต่แก้คำสั่งใน form ใน html ของท่าน โดยแก้ไข
จาก <form method=post action="http://www.thaiall.com/cgi/formmail.pl">
เป็น <form method=post action="http://www.isinthai.com/sndform.php">
ซึ่งเป็นตัวอย่างที่เขียนไว้ในตัวอย่างที่ 3
จะทำให้ท่านเรียกใช้ perl ของเราส่ง mail ไปให้ท่านได้อย่างง่ายดาย
ที่สำคัญที่สุดก็อย่าลืมแก้บรรทัด recipient ให้เป็น E-Mail ของท่านนะครับ
ไม่งั้น mail ทุกฉบับที่ส่งถึงท่านจะมาถึงผม ซะหมด

ผมได้ทดลองตัวอย่างที่ที่ http://burin.8m.com/plsndfm3.htm แล้ว work ครับ
จึงเป็นไปได้สูงที่จะใช้ได้ในเกือบทุก server เช่น geocities, xoom, tripod, thethai, thai.net เป็นต้น

โปรแกรม perl ที่ใช้ส่งข้อมูล ไปให้เราผ่าน mail
โปรแกรมข้างล่างนี้ ปรับปรุงมาจากโปรแกรม formmail ของ Matt Wright
ใน http://www.scriptarchive.com/readme/formmail.html
หากจะนำไปใช้ ท่านสามารถปรับปรุงส่วนของ From และ Subject ให้เข้ากับการใช้งาน
ของท่านได้ไม่ยาก เพราะตัวโปรแกรมไม่ได้ยุ่งยากซับซ้อนอะไรเลย
เพราะหน้าที่ของโปรแกรมนี้ คือการส่ง mail โดยนำค่าที่รับเข้ามาส่งไป เท่านั้นเอง
+ copy โปรแกรมข้างล่างนี้ไปใส่ใน notepad แล้ว save ในชื่อ formmail.pl แล้วเก็บในห้อง /cgi 
+ อย่าลืมแก้ /usr/local/bin/perl และ /var/qmail/bin/qmail-inject ตามที่ server ของท่านกำหนด

    #!/usr/local/bin/perl # Source from http://www.worldwidemart.com/scripts/ # Copyright 1995 - 1997 Matt Wright Version 1.6 - Released May 02, 1997 # start main program $mailprog = '/var/qmail/bin/qmail-inject'; &parse_form; &send_mail; print "Content-type:text/html\n\n"; if (length($Form{'redirect'}) > 5) { print "<meta http-equiv='refresh' content='0; url=",$Form{'redirect'},"'>"; } print "Thank you very much."; exit; # end main program sub parse_form { %Config = ('recipient',''); if ($ENV{'REQUEST_METHOD'} eq 'GET') { @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); } foreach $pair (@pairs) { local($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; if (defined($Config{$name})) { $Config{$name} = $value; } else { if ($Form{$name} && $value) { $Form{$name} = "$Form{$name}, $value"; } elsif ($value) { push(@Field_Order,$name); $Form{$name} = $value; } } } } sub send_mail { open(MAIL,"|$mailprog"); print MAIL "To: $Config{'recipient'}\n"; print MAIL "From: submit\@from.your.web \n"; print MAIL "Subject: Send.from.your.form \n\n"; print MAIL "This is the first sentence from your form. \n"; print MAIL "-" x 75 . "\n\n"; foreach $field (sort keys %Form) { if ($Form{$field} || $Form{$field} eq '0') { print MAIL "$field: $Form{$field}\n\n"; } } print MAIL "-" x 75 . "\n\n"; print MAIL $ENV{'HTTP_REFERER'} , "\n\n"; close (MAIL); }

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้ทำฟอร์มส่ง mail ธรรมดา
  2. ให้ทำฟอร์มขายดอกไม้ มีตัวเลือกนิดหน่อย
  3. ให้ทำฟอร์มขายหนังสือ ซึ่งมี text checkbox radio และ select ครบชุดเลย
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223