{************************************************ * *****************************
กระบวนการนี้ใช้เพื่อรับชื่อเซิร์ฟเวอร์ปลายทางการจัดส่งทางไปรษณีย์และหมายเลขลำดับความสำคัญ พารามิเตอร์ AMXList ใช้ในการรับค่าผลลัพธ์ ********* ***************************************** ********** **********}
ขั้นตอน TQuickEMailFrm.GetMxList (AMxList: TStringList; AQName: string);
var
ฉัน: จำนวนเต็ม;
เริ่ม
ด้วย IdDNSResolver ทำ
เริ่ม
โฮสต์ := 202.102.13.141 ; { คุณลักษณะโฮสต์ใช้เพื่อระบุที่อยู่ของเซิร์ฟเวอร์ชื่อโดเมนซึ่งเป็นที่อยู่เซิร์ฟเวอร์ชื่อโดเมนหลักที่ผู้เขียนตั้งอยู่ คุณยังสามารถระบุที่อยู่เซิร์ฟเวอร์ชื่อโดเมนใดก็ได้บนอินเทอร์เน็ต สามารถเข้าถึงได้อย่างรวดเร็ว คุณต้องรู้ว่าคุณอยู่ที่ไหน ที่อยู่เซิร์ฟเวอร์ชื่อโดเมนสามารถพบได้ผ่านคำสั่ง winipcfg ภายใต้ win98 และผ่าน ipconfig /all ภายใต้ win2000 -
ReceiverTimeout := 10,000; // หากไม่ได้รับการตอบกลับจากเนมเซิร์ฟเวอร์โดเมนภายในเวลาที่กำหนด จะถือว่าล้มเหลว
ClearVars; // ล้างบันทึกทรัพยากรที่ส่งคืนโดยการสืบค้นก่อนหน้า
{สร้างโครงสร้างส่วนหัวของแบบสอบถามนี้}
ด้วย DNSHeader ทำ
เริ่ม
Qr := False; // False แสดงถึงการสืบค้น Opcode := 0; // 0 แสดงถึงการสืบค้นชื่อโดเมนมาตรฐาน RD := True; // เซิร์ฟเวอร์ชื่อโดเมนสามารถดำเนินการสืบค้นแบบเรียกซ้ำได้ := 1; สิ้นสุดการสืบค้น;
{สร้างคำถามที่จะสอบถาม}
DNSQDList.ล้าง;
ด้วย DNSQDList.Add ทำ
เริ่ม
QName := AQName; // ชื่อโดเมนที่ต้องการสอบถาม QType := cMX; // QTYPE ระบุประเภทของบันทึกทรัพยากรที่จะสอบถาม
จบ;
ResolveDNS; //ส่งคำขอไปยังเซิร์ฟเวอร์ชื่อโดเมน
{รับผลคำติชมจากเซิร์ฟเวอร์ชื่อโดเมนและใส่ชื่อเซิร์ฟเวอร์เมลคำติชมในส่วนชื่อของรายการ AMXList
หมายเลขลำดับความสำคัญของเมลเซิร์ฟเวอร์จะอยู่ในส่วนค่า -
สำหรับ i := 0 ถึง DNSAnList.Count - 1 ทำ
AMxList.Add(DNSanList[i].RData.MX.Exchange + = +
IntToStr(DNSanList[i].RData.MX.Preference));
จบ;
จบ;
{ส่งอีเมลจัดส่งเมื่อมีการคลิกปุ่ม "ส่ง"}
ขั้นตอน TQuickEMailFrm.btnSendClick (ผู้ส่ง: TObject);
var
MxList: TStringList;
ฉัน: จำนวนเต็ม;
QName, แม้ว่าที่อยู่: string;
เริ่ม
//สร้างอีเมลตามเนื้อหาที่ผู้ใช้กรอกด้วย IdMsgSend
เริ่ม
Body.Assign(mmContent.Lines); // ข้อความอีเมล From.Address := Trim(edtFrom.Text); // ที่อยู่ผู้ส่ง Recipients.EMailAddresses := Trim(edtTo.Text); // ที่อยู่ผู้รับ เรื่อง := edtSubject ข้อความ; // หัวข้ออีเมล;
//รับชื่อโดเมนอีเมลจากที่อยู่ผู้รับที่ป้อน และใช้กระบวนการ GetMxList ก่อนหน้าเพื่อรับที่อยู่ปลายทาง QName := TrimRight(copy(edtTo.Text, Pos( @ , edtTo.Text) + 1, ความยาว(edtTo. ข้อความ) )));
MxList := TStringList.Create;
พยายาม
GetMxList(MxList, QName);
แม้ว่าที่อยู่: = MxList.Names [0];
{เซิร์ฟเวอร์แรกที่มีคำติชมจะถือเป็นปลายทาง ผู้อ่านสามารถทำการปรับปรุงได้ตามความต้องการที่แท้จริง เช่น การพิจารณาลำดับความสำคัญของเมล หรือเมื่อเซิร์ฟเวอร์ที่คุณเลือกไม่สามารถประมวลผลเมลของคุณได้ชั่วคราวเนื่องจากความยุ่งวุ่นวาย ให้ลองใช้เซิร์ฟเวอร์อื่น . พยายาม}
ในที่สุด
MxList.ฟรี;
จบ;
//ส่งอีเมลด้วย IdSMTP ทำ
เริ่ม
โฮสต์ := แม้ว่าที่อยู่; // กำหนดโฮสต์เป็นปลายทาง นี่คือความแตกต่างระหว่างเอ็กซ์เพรสเมลและเมลธรรมดา := 25; // พอร์ตเริ่มต้นของบริการ smtp คือ 25
เชื่อมต่อ; //ลองเชื่อมต่อกับเซิร์ฟเวอร์
ส่ง(IdMsgSend); //ส่งอีเมลที่เพิ่งสร้าง ShowMessage(ส่งเสร็จสิ้น); //แจ้งในที่สุดหลังจากส่งเสร็จสิ้น
ตัดการเชื่อมต่อ // ตัดการเชื่อมต่อส่วนท้ายของเซิร์ฟเวอร์;
จบ;
จบ;