โดยปกติ CGI ของ mailto.exe จะใช้ในการใช้งาน WEBMAIL โดยเขียนคำสั่ง "< form action="mailto:email address" method=post >" ในไฟล์ HTML หรือการเรียกใช้ฟังก์ชัน WINDOWS API การใช้ WINDOWS API และการเขียนคำสั่ง "< form action="mailto:email address" method=post >" ในไฟล์ HTML กำหนดให้เบราว์เซอร์ของผู้ใช้โหลดซอฟต์แวร์ เช่น EXCHANGE, OutlookEXPRESS หรือ OUTLOOK และยังมีบางส่วน การเรียกดูเซิร์ฟเวอร์ไม่สนับสนุนคำสั่ง MAILTO การใช้ CGI เพื่อใช้งาน WEBMAIL นั้นไม่มีข้อกำหนดในเบราว์เซอร์ของผู้ใช้ แต่ก็ไม่ได้มีประสิทธิภาพ เทคโนโลยี CGI ค่อยๆ ถูกแทนที่ด้วยเทคโนโลยี ISAPI/NSAPI บทความนี้จะหารือเกี่ยวกับการใช้งาน WEBMAIL โดยใช้เทคโนโลยี ISAPI
การพัฒนาโปรแกรมเว็บเซิร์ฟเวอร์โดยใช้ Delphi 4 เป็นเรื่องง่ายมาก Delphi 4 มีส่วนประกอบและอ็อบเจ็กต์จำนวนมากเพื่อรองรับการพัฒนาโปรแกรมเว็บเซิร์ฟเวอร์ ต่อไปนี้เป็นตัวอย่างวิธีใช้ DELPHI เพื่อพัฒนาโปรแกรม ISAPI WEBMAIL ที่ตอบสนองต่ออินพุตของผู้ใช้ เฉพาะผู้ใช้ที่ลงทะเบียนบนเซิร์ฟเวอร์ที่ส่งเท่านั้นที่สามารถส่งอีเมลผ่านเบราว์เซอร์ได้ เพื่อความเรียบง่าย โปรแกรมไม่ได้จัดให้มีการรักษาความลับสำหรับข้อมูลที่ส่ง
ขั้นแรก ให้ติดตั้งกลไกฐานข้อมูล dbe บนเซิร์ฟเวอร์เว็บ และตั้งค่านามแฝงฐานข้อมูล: yh โดยชี้ไปที่ไฟล์ฐานข้อมูล user.db ที่มีชื่อผู้ใช้และรหัสผ่านผู้ใช้ จากนั้นสร้างไฟล์ HTML สองไฟล์ชื่อ: dl.html, qd.html ตามลำดับ และวางไว้ในไดเร็กทอรีเริ่มต้นของเซิร์ฟเวอร์เว็บ (เช่น C: INETPUBWWWROOT)
เนื้อหาของ dl.html มีดังนี้:
<html>
< head >< title >ระบบส่งอีเมล</ /title >< /head >
<ร่างกาย>
<h1>ระบบส่งอีเมล</h1>
<p> กรุณากรอกชื่อผู้ใช้และรหัสผ่านของคุณ </p>
< วิธีการแบบฟอร์ม = "โพสต์" การกระทำ = "/ scripts/xsmd" >
< p >ชื่อผู้ใช้: < input type="text" length=10
ชื่อ = "ชื่อผู้ใช้" >
รหัสผ่าน: < ประเภทอินพุต = "รหัสผ่าน"
length=10 name="รหัสผ่าน" >< /p >
< p >< ประเภทอินพุต = "ส่ง" ค่า = "ตกลง" >
< ประเภทอินพุต = "รีเซ็ต" ค่า = "ล้าง" >< /p >
</ /รูปแบบ >
</ ร่างกาย >
</ /html >
เนื้อหาของไฟล์ qd.html มีดังนี้:
< html >< head >< title >กรอกแบบฟอร์ม</ /title >< /head >
<ร่างกาย>
< รูปแบบวิธีการ = "โพสต์" การกระทำ = "ข้อเสนอแนะ" >
< p >กรุณากรอกที่อยู่อีเมลสำหรับรับ:toaddress:
< ประเภทอินพุต = "ข้อความ" ยาว = 20
ชื่อ =”ที่อยู่คางคก” >< /p >
< p >กรุณากรอกหัวเรื่อง. < ประเภทอินพุต = "ข้อความ"
length=20 name="เรื่อง" >< /p >
<p>เนื้อหา:</p>
< p >< ประเภทอินพุต = "textarea" ความยาว = 40
width=40 name=”body” >< /p >
< p >< ประเภทอินพุต = "ส่ง" ค่า = "ตกลง" >
< ประเภทอินพุต = "รีเซ็ต" ค่า = "ล้าง" >< /p >
</ /รูปแบบ >
</ ร่างกาย >
</ /html >
สร้างแอปพลิเคชันเว็บเซิร์ฟเวอร์ที่ใช้ ISAPI ใหม่ใน DELPHI และเพิ่ม nmsmtp1, query1 และ pageproducer1 ด้วยตนเอง
ในหมู่พวกเขา: คุณสมบัติของ pageproducer1: htmlfile: c:inetpubwww.rootqd.html คุณสมบัติ:โฮสต์ของ nmsmtp1 (ที่อยู่ของเซิร์ฟเวอร์อีเมลที่ส่ง) คือ smtp.netease.com ที่นี่ พอร์ต:25. ตัวแปรร่วมคือ: sername:string;flag:boolean;
เพิ่มรายการการดำเนินการด้วยเส้นทาง /feedback รหัสจะเป็นดังนี้:
ขั้นตอน TWebModule1.WebModule1WebActionItem1
การดำเนินการ (ผู้ส่ง: TObject;
คำขอ: TWebRequest;
TWebResponse; var จัดการ: บูลีน);
จำนวนนับ:จำนวนเต็ม;
ส:สตริง;
เริ่ม
Query1.ปิด;
Query1.sql.ชัดเจน;
S:='เลือกจำนวน(ชื่อผู้ใช้) จาก
user.db โดยที่ชื่อผู้ใช้ =”';
S:=s+request.contentfields.values['ชื่อผู้ใช้']+'"';
S:=s+' และรหัสผ่าน=”';
S:=s+request.contentfields.values['psword']+'"';
Query1.sql.add(S);
Query1.open;
ถ้า query1.count=0
จากนั้น response.content:='< html >< head >< title >
</title >< body >ชื่อผู้ใช้และรหัสผ่านไม่ถูกต้อง กรุณากรอกใหม่อีกครั้ง
</body >< /html >'
อื่น
ชื่อผู้ใช้:=request.contentfields.values['ชื่อผู้ใช้'];
Response.content:=pageproducer1.content;
จบ;
เพิ่มรายการการกระทำอื่นด้วยเส้นทาง /sendmail
รหัสโปรแกรมของมันมีดังนี้:
ขั้นตอน TWebModule1.WebModule1Web
ActionItem2Action (ผู้ส่ง: TObject;
คำขอ: TWebRequest;
TWebResponse; var จัดการ: บูลีน);
วาร์ร่างกาย:สตริง;
เริ่ม
แฟล็ก:=true;
ร่างกาย:=request.contentfields.values['body'];
Pageproducer1.htmldoc.clear;
Pageproducer1.htmldoc.add('< html >< body >');
Nmsmtp1.postmessage.clear;
Nmsmtp1.postmessage.fromaddress:=ชื่อผู้ใช้+
'@netease.com';
Nmsmtp1.postmessage.from:=ชื่อผู้ใช้;
Nmsmtp1.postmessage.body.add(ร่างกาย);
Nmsmtp1.postmessage.toaddress.add
(request.contentfields.values['toaddress']);
Nmsmtp1.postmessage.subject:=
request.contentfields.values['หัวเรื่อง'];
Nmsmtp1.เชื่อมต่อ;
ถ้า flag=true ให้เริ่ม Nmsmtp1.sendmail;
nmsmtp1.ไม่พอใจ;สิ้นสุด
pageproducer1.htmldoc.add
('< /body >< /html >');
response.content:=pageproducer1.content;
จบ;
เหตุการณ์ที่เพิ่ม nmsmtp1 มีดังนี้:
ขั้นตอน TWebModule1.NMSMTP1Connect (ผู้ส่ง: TObject);
เริ่ม
pageproducer1.htmldoc.add
('< p >เชื่อมต่อกับเซิร์ฟเวอร์เมลขาออกแล้ว</p>');
จบ;
ขั้นตอน TWebModule1.NMSMTP1Connection
ล้มเหลว (ผู้ส่ง: TObject);
เริ่ม
ธง:=เท็จ;
pageproducer1.htmldoc.add
('< p >การเชื่อมต่อล้มเหลว</ /P >');
จบ;
ขั้นตอน TWebModule1.NMSMTP1ConnectionRequired
(var จัดการ: บูลีน);
เริ่ม
pageproducer1.htmldoc.add('< p >ต้องมีการเชื่อมต่อ</p>');
จบ;
ขั้นตอน TWebModule1.NMSMTP1Failure (ผู้ส่ง: TObject);
เริ่ม
pageproducer1.htmldoc.add('< p >ไม่สามารถส่งอีเมลได้</p>');
ธง:=เท็จ;
จบ;
ขั้นตอน TWebModule1.NMSMTP1Header
ไม่สมบูรณ์ (จัดการ var: บูลีน;
hiType: จำนวนเต็ม);
เริ่ม
pageproducer1.htmldoc.add('< p >head is not complete</ /p >');
ธง:=เท็จ;
จบ;
ขั้นตอน TWebModule1.NMSMTP1InvalidHost
(var จัดการ: บูลีน);
เริ่ม
pageproducer1.htmldoc.add('< p >
ที่อยู่เซิร์ฟเวอร์อีเมลที่ส่งไม่ถูกต้อง</p>');
ธง:=เท็จ;
จบ;
ขั้นตอน TWebModule1.NMSMTP1RecipientNot
พบ (ผู้รับ: สตริง);
เริ่ม
pageproducer1.htmldoc.add
('< p >ที่อยู่อีเมลที่ได้รับไม่ถูกต้อง</p>');
ธง:=เท็จ;
จบ;
ขั้นตอน TWebModule1.NMSMTP1Success(
ผู้ส่ง: TObject);
เริ่ม
pageproducer1.htmldoc.add('< p >
ส่งอีเมลเรียบร้อยแล้ว</ /p >');
จบ;
บันทึกโปรเจ็กต์เป็น sendmail.dpr คอมไพล์และวางไว้ในพาธไฟล์ปฏิบัติการของเซิร์ฟเวอร์เว็บ (เช่น: c:intpubscripts) คุณสามารถตอบสนองต่ออินพุตผู้ใช้ของไฟล์ HTML dl.htm และหากผู้ใช้ ชื่อผู้ใช้และรหัสผ่านถูกต้อง คุณสามารถเข้าสู่หน้าสำหรับส่งอีเมลได้ โดยผู้ใช้สามารถส่งอีเมลได้หลังจากกรอกที่อยู่อีเมล หัวข้อ และเนื้อหาแล้ว โปรแกรมนี้ผ่านการดีบักบน NT SERVER