Contoh dalam artikel ini menjelaskan metode pengiriman pesan Email massal di Delphi7. Bagikan dengan semua orang untuk referensi Anda. Analisis spesifiknya adalah sebagai berikut:
Selama periode ini, informasi kandidat dan informasi ujian perlu dikirim ke semua kandidat yang mengikuti ujian melalui email. Setelah banyak proses debug, ini dianggap berhasil.
Ide umumnya adalah:
1. Instal server email versi LAN , dan atur DNS sehingga server dapat mengirim email ke pengguna di luar jaringan. Ada banyak perangkat lunak di area ini, seperti WinWebMail, yang bagus dan dapat diunduh dari yang resmi situs web;
2. Kontrol yang perlu digunakan: Indy10.0.15, yang dapat diunduh melalui pencarian Baidu;
3. Atur server email dan informasi akun yang akan dikirim
Salin kode sebagai berikut: function setEmailInfo:integer; //Nilai pengembalian 0: Pengaturan email gagal;
var
pilihStr:string;
hasil ini: bilangan bulat;
mulai
hasil ini := 0;
//Siapkan akun
IdSMTP1.AuthType := atNone; //atau atSASL;
IdSMTP1.Host := hostString;
IdSMTP1.Nama Pengguna := namapenggunaString;
IdSMTP1.Kata Sandi := passWordString;
mencoba
IdSMTP1.koneksi;
hasil ini := 1;
jika bukan IdSMTP1. Otentikasi maka
mulai
showmessage('Pengiriman verifikasi akun email gagal! Silakan periksa pengaturan akun SMTP!');
hasil ini := 0;
akhir
kecuali
showmessage('Koneksi server SMTP gagal! Silakan periksa apakah pengaturan akun SMTP dan jaringan normal!');
hasil ini := 0;
akhir
akhir;
hasil := hasil ini;
akhir;
4. Mengirim pesan melalui email sebagai fungsi independen, dan kontrol penundaan diperlukan saat mengirim.
Salin kode sebagai berikut: procedure sendEmailOnce(emailusername:string;
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
mulai
MsgKsbkxx.From.Name := emailusername; //Nama pengirim email
MsgKsbkxx.From.Address := formAddress; //Alamat pengirim email
MsgKsbkxx.ReceiptRecipient.Address := ReceipientAddress;
//Alamat balasan, yang bisa berbeda dengan alamat pengirim email
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd; //Alamat pengiriman?
MsgKsbkxx.Sender.Address := formAddress; //sendtoAdd; //Kirim email ke... alamat
MsgKsbkxx.Subjek := emailSubjek; //Subjek
MsgKsbkxx.Body.Assign(emailMemo.Lines); //Konten email
IdSMTP1.Send(MsgKsbkxx); //Kirim perintah email
akhir;
5. Cukup tentukan keabsahan alamat email
Salin kodenya sebagai berikut: // Pisahkan string s menjadi beberapa string sesuai dengan representasi string Separator, dan simpan di daftar string rs.
procedure SeparateTerms2(s:string;Separator:string;var rs:TStringList);
var
AStr: tali;
idx: Bilangan bulat;
ASubStr: rangkaian;
mulai
AStr := Pangkas;
sedangkan Pos(Pemisah, AStr) > 0 lakukan
mulai
idx := Pos(Pemisah, AStr);
ASubStr := Salin(AStr, 1, idx - 1);
rs.Tambahkan(ASubStr);
AStr := Salin(AStr, idx + 1, Panjang(AStr));
akhir;
if AStr+'a' <> 'a' lalu rs.Add(AStr); //Jika ada string yang tersisa, simpan di daftar string
akhir;
//Tentukan apakah suatu string memenuhi standar alamat email
//Benar: kembali oke, kesalahan kembali kesalahan
fungsi emailAddressYesOrNo (emailAddress:String):string;
var
getStrings:TStringList;
getYesOrNo:string;
mulai
getYesOrNo := 'kesalahan';
getStrings := TStringList.Buat;
SeparateTerms2(alamat email,'@',getStrings);
jika getStrings.Count=2 maka
mulai
getStrings.Hapus;
SeparateTerms2(emailAddress,'.',getStrings);
jika getStrings.Count>1 maka getYesOrNo := 'ok';
akhir;
getStrings.Gratis;
hasil := getYesOrNo;
akhir;
6. Kirim email secara berkelompok
Copy kode sebagai berikut: procedure bEmailKsxxClick;
var
Jumlah Kesepakatan,i,j,tag:integer;
nama pengguna email, alamat formulir, kirim ke Tambah, Subjek email, Alamat Penerima Penerimaan, pilihStr: string;
mulai
//Tentukan apakah ada data di tabel data yang perlu dikirim melalui email, dan jika ada, kirimkan
jika Bmb.RecordCount >0 maka
AccordAmount := Bmb.RecordCount
kalau tidak
KELUAR;
//
//Mendapatkan informasi akun, biasanya disimpan dalam tabel data atau file INI
emailnamapengguna :=namapenggunaString; //Pengirim email
formAddress := fromAddressString; //Mengirim alamat email
receipientAddress := receipientAddressString; //Balasan alamat email
Subjek email := emailSubjectString; //Subjek email
//
tag := 1; //Bendera bit: berhenti saat mengirim kesalahan
i:=1; //Jumlah total email yang dikirim
j:=0; //Jumlah rekaman yang diproses agar bilah kemajuan meningkat secara bertahap
list1.Clear; //Menampilkan informasi tentang siswa yang emailnya berhasil dikirim
//Tentukan apakah dapat dihubungkan ke kotak surat yang ditetapkan. Jika nilai yang dikembalikan adalah 1, dapatkan konten email dan pengaturan terkait dan kirimkan
jika setEmailInfo = 1 maka
mulai
Pb.Ukuran Blok := 1;
Pb.Max := Jumlah Kesepakatan ;
Formsjtj.Refresh;
Bmb.Pertama;
mencoba
sementara (bukan tBmb.Eof) lakukan
mulai
//Tentukan apakah alamat email kosong dan memenuhi spesifikasi email. Jika kedua kondisi terpenuhi, kirim email ke alamat tersebut.
jika Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' maka
mulai
//Dapatkan isi email yang dikirim
emailMemo.Hapus;
........................
//Mengatur informasi email. Jika terjadi kesalahan dalam pengiriman email, langsung keluar.
jika tag=0 lalu keluar;
//Kirim email
sendtoAdd := trim(Bmb.FieldByName('s_emailAddress').AsString); //Perlu dikirim ke...kotak surat
if emailAddressYesOrNo(sendtoAdd)= 'ok' lalu //Periksa apakah format email sudah benar
mulai
sendEmailOnce(nama pengguna email,Alamat formulir,Alamat Penerima Penerimaan,kirim keTambah,Subjek email); //Kirim email
saya := i+1; //penghitung ditambah 1
list1.Items.Add(......); //Masukkan informasi kandidat yang berhasil dikirim emailnya ke dalam daftar
akhir;
//
akhir;
//Ini terhenti selama 2 detik setiap kali 50 email dikirim.
jika (i mod 50) = 0 maka tidur(2000);
dm_sjtj.ListBmb.next;
Application.ProcessMessages; //Memproses informasi proses dalam loop
//Segarkan indikator kemajuan
j := j+1;
PB.Kemajuan:=j;
PB.StepIt;
PB.Segarkan;
akhir;
Akhirnya
tandai := 0;
IdSMTP1.Putuskan sambungan;
akhir;
akhir;
showmessage('Total terkirim'+intToStr(i-1)+' email.');
akhir;
7. Permasalahan yang perlu mendapat perhatian
① Email spam tidak diperbolehkan oleh negara
② Karena email massal dikendalikan oleh sebagian besar penyedia email, sering kali ada penundaan antara dua email.
③ Karena kontrol Indy hanya memiliki dua mode: atNone dan atSASL, setelah menyiapkan server email, Anda perlu menyiapkan alamat IP dan akun yang tidak memerlukan verifikasi;
④ Karena alamat email internal tidak dapat memperoleh balasan email, alamat balasan dan alamat pengiriman sering kali diatur berbeda. Salah satu masalah yang muncul saat ini adalah Anda tidak bisa membalas saat membuka email melalui browser, namun Anda bisa mendapatkan balasan setelah menerima email melalui Foxmail. Hal ini perlu mendapat perhatian.
Saya harap artikel ini bermanfaat untuk pemrograman Delphi semua orang.