{******************************************************* *****************************
Proses ini digunakan untuk mendapatkan nama server tujuan pengiriman surat ekspres dan nomor prioritas. Parameter AMXList digunakan untuk menerima nilai hasil AQName mewakili nama domain yang diteruskan***************. ********* ******************************************* *******************}
prosedur TQuickEMailFrm.GetMxList(AMxList: TStringList; AQName: string);
var
saya: Bilangan bulat;
mulai
dengan IdDNSResolver lakukan
mulai
Host := 202.102.13.141 ; { Atribut Host digunakan untuk menentukan alamat server nama domain. Ini adalah alamat server nama domain utama tempat pembuatnya berada dapat diakses dengan cepat. Anda harus tahu di mana Anda berada. Alamat server nama domain dapat ditemukan melalui perintah winipcfg di bawah win98 dan melalui ipconfig /all di bawah win2000. }
AcceptTimeout := 10000; // Jika tidak ada feedback dari server nama domain dalam waktu yang ditentukan, maka dianggap gagal.
ClearVars; // Hapus catatan sumber daya yang dikembalikan oleh kueri sebelumnya
{Bangun struktur header kueri ini}
dengan DNSHeader lakukan
mulai
Qr := False; // False mewakili kueri Opcode := 0; // 0 mewakili kueri nama domain standar RD := True //Server nama domain dapat melakukan kueri rekursif QDCount := 1; pertanyaan berakhir;
{Buatlah pertanyaan yang akan ditanyakan}
DNSQDList.Hapus;
dengan DNSQDList.Tambahkan lakukan
mulai
QName := AQName; //Nama domain yang akan ditanyakan QType := cMX; //QTYPE menentukan tipe data sumber daya yang akan ditanyakan.
akhir;
ResolveDNS; //Kirim permintaan ke server nama domain
{Terima hasil umpan balik dari server nama domain dan masukkan nama server email umpan balik di bagian Nama dalam daftar AMXList.
Nomor prioritas server email ditempatkan di bagian Nilai. }
untuk i := 0 hingga DNSAnList.Count - 1 lakukan
AMxList.Tambahkan(DNSAnList[i].RData.MX.Exchange + = +
IntToStr(DNSAnList[i].RData.MX.Preference));
akhir;
akhir;
{Kirim email pengiriman ketika tombol "Kirim" diklik}
prosedur TQuickEMailFrm.btnSendClick(Pengirim: TObject);
var
Daftar Mx: Daftar TString;
saya: Bilangan bulat;
QName, ThoughAddress: string;
mulai
//Buat email berdasarkan konten yang diisi oleh pengguna dengan IdMsgSend do
mulai
Body.Assign(mmContent.Lines); //Teks email Dari.Alamat := Trim(edtFrom.Text); //Alamat pengirim Penerima.EMailAddresses := Trim(edtTo.Text); Teks; //akhir subjek email;
//Dapatkan nama domain email dari alamat penerima yang dimasukkan, dan gunakan proses GetMxList sebelumnya untuk mendapatkan alamat tujuan QName := TrimRight(copy(edtTo.Text, Pos( @ , edtTo.Text) + 1, Panjang(edtTo. Teks) )));
MxList := TStringList.Buat;
mencoba
GetMxList(MxList, QNama);
MeskipunAlamat := MxList.Nama[0];
{Server pertama dengan umpan balik diambil sebagai tujuan. Pembaca dapat melakukan perbaikan sesuai dengan kebutuhan sebenarnya, seperti mempertimbangkan prioritas email atau ketika server yang Anda pilih untuk sementara tidak dapat memproses email Anda karena kesibukan, coba gunakan server lain. . mencoba}
Akhirnya
MxList.Gratis;
akhir;
//Kirim email dengan IdSMTP lakukan
mulai
Host := ThoughAddress; // Tetapkan Host sebagai tujuan. Inilah perbedaan antara surat kilat dan surat biasa. Port := 25;
Hubungkan; //Sambungkan ke server coba
Kirim(IdMsgSend); //Kirim email yang baru saja dibuat ShowMessage(Terkirim selesai); //Prompt akhirnya setelah pengiriman selesai
Putuskan sambungan; //Putuskan sambungan ujung server;
akhir;
akhir;