Das Beispiel in diesem Artikel beschreibt die Methode zum Versenden von Massen-E-Mail-Nachrichten in Delphi7. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Während dieses Zeitraums müssen die Kandidateninformationen und Prüfungsinformationen per E-Mail an alle Kandidaten gesendet werden. Nach vielen Debugging-Vorgängen wird dies als Erfolg angesehen.
Die allgemeine Idee ist:
1. Installieren Sie eine LAN-Version des Mailservers und richten Sie DNS ein, damit der Server E-Mails an Benutzer außerhalb des Netzwerks senden kann. In diesem Bereich gibt es viele Softwareprogramme, z. B. WinWebMail, die gut sind und von der offiziellen Website heruntergeladen werden können Webseite;
2. Die Steuerelemente, die verwendet werden müssen: Indy10.0.15, das über die Baidu-Suche heruntergeladen werden kann;
3. Legen Sie den E-Mail-Server und die Kontoinformationen fest, die gesendet werden sollen
Kopieren Sie den Code wie folgt: function setEmailInfo:integer; //Rückgabewert 0: E-Mail-Einstellung fehlgeschlagen. 1: E-Mail-Einstellung erfolgreich
var
selectStr:string;
thisresult:integer;
beginnen
dieses Ergebnis := 0;
//Konto einrichten
IdSMTP1.AuthType := atNone; //or atSASL;
IdSMTP1.Host := hostString;
IdSMTP1.Benutzername := userNameString;
IdSMTP1.Password := passWordString;
versuchen
IdSMTP1.connect;
dieses Ergebnis := 1;
Wenn nicht IdSMTP1.Authenticate, dann
beginnen
showmessage('Verifizierung des E-Mail-Kontos konnte nicht gesendet werden! Bitte überprüfen Sie die SMTP-Kontoeinstellungen!');
dieses Ergebnis := 0;
Ende
außer
showmessage('SMTP-Serververbindung fehlgeschlagen! Bitte überprüfen Sie, ob die SMTP-Kontoeinstellungen und das Netzwerk normal sind!');
dieses Ergebnis := 0;
Ende
Ende;
Ergebnis := dieses Ergebnis;
Ende;
4. Senden Sie eine Nachricht per E-Mail als unabhängige Funktion. Beim Senden ist eine Verzögerungskontrolle erforderlich.
Kopieren Sie den Code wie folgt: procedure sendEmailOnce(emailusername:string;
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
beginnen
MsgKsbkxx.From.Name := emailusername; //Name des E-Mail-Absenders
MsgKsbkxx.From.Address := formAddress; //E-Mail-Absenderadresse
MsgKsbkxx.ReceiptRecipient.Address := quittungRecipientAddress;
//Antwortadresse, die von der Adresse des E-Mail-Absenders abweichen kann
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd; //Sendeadresse?
MsgKsbkxx.Sender.Address := formAddress; //sendtoAdd; //E-Mail senden an... Adresse
MsgKsbkxx.Subject := emailSubject; //Subject
MsgKsbkxx.Body.Assign(emailMemo.Lines); //E-Mail-Inhalt
IdSMTP1.Send(MsgKsbkxx); //E-Mail-Befehl senden
Ende;
5. Stellen Sie einfach die Legitimität der E-Mail-Adresse fest
Kopieren Sie den Code. Der Code lautet wie folgt: // Teilen Sie die Zeichenfolge s gemäß der Darstellung des Zeichenfolgentrennzeichens in mehrere Zeichenfolgen auf und speichern Sie sie in der Zeichenfolgenliste rs.
procedure SeparateTerms2(s:string;Separator:string;var rs:TStringList);
var
AStr: string;
idx: Ganzzahl;
ASubStr: string;
beginnen
AStr := Trim(s);
while Pos(Separator, AStr) > 0 do
beginnen
idx := Pos(Trennzeichen, AStr);
ASubStr := Copy(AStr, 1, idx - 1);
rs.Add(ASubStr);
AStr := Copy(AStr, idx + 1, Länge(AStr));
Ende;
if AStr+'a' <> 'a' then rs.Add(AStr); //Wenn noch Strings vorhanden sind, speichern Sie diese in der String-Liste
Ende;
//Bestimmen Sie, ob eine Zeichenfolge dem E-Mail-Adressstandard entspricht
//Richtig: Rückkehr ok, Fehler Rückkehr Fehler
Funktion emailAddressYesOrNo (emailAddress:String):string;
var
getStrings:TStringList;
getYesOrNo:string;
beginnen
getYesOrNo := 'error';
getStrings := TStringList.Create;
SeparateTerms2(emailAddress,'@',getStrings);
wenn getStrings.Count=2 dann
beginnen
getStrings.Clear;
SeparateTerms2(emailAddress,'.',getStrings);
if getStrings.Count>1 then getYesOrNo := 'ok';
Ende;
getStrings.Free;
Ergebnis := getYesOrNo;
Ende;
6. Senden Sie E-Mails stapelweise
Kopieren Sie den Code wie folgt: procedure bEmailKsxxClick;
var
AccordAmount,i,j,tag:integer;
emailusername,formAddress,sendtoAdd,emailSubject,receiptRecipientAddress,selectStr:string;
beginnen
//Bestimmen Sie, ob Daten in der Datentabelle vorhanden sind, die per E-Mail gesendet werden müssen, und wenn ja, senden Sie sie
wenn Bmb.RecordCount >0 dann
AccordAmount := Bmb.RecordCount
anders
Ausfahrt;
//
//Kontoinformationen abrufen, die normalerweise in einer Datentabelle oder einer INI-Datei gespeichert sind
emailusername := userNameString; //Absender der E-Mail
formAddress := fromAddressString; //E-Mail-Adresse senden
quittungRecipientAddress := quittungRecipientAddressString; //Antwort-E-Mail-Adresse
emailSubject := emailSubjectString; //E-Mail-Betreff
//
tag := 1; //Flag-Bit: Stopp beim Senden eines Fehlers
i:=1; //Gesamtzahl der gesendeten E-Mails
j:=0; //Die Anzahl der verarbeiteten Datensätze, damit der Fortschrittsbalken schrittweise vorrückt
list1.Clear; //Informationen zu Schülern anzeigen, deren E-Mails erfolgreich gesendet wurden
//Bestimmen Sie, ob eine Verbindung zum festgelegten Postfach hergestellt werden kann. Wenn der Rückgabewert 1 ist, rufen Sie den E-Mail-Inhalt und die zugehörigen Einstellungen ab und senden Sie ihn
wenn setEmailInfo = 1 dann
beginnen
Pb.BlockSize := 1;
Pb.Max := AccordAmount ;
Formsjtj.Refresh;
Bmb.First;
versuchen
while (nicht tBmb.Eof) do
beginnen
//Stellen Sie fest, ob die E-Mail-Adresse leer ist und die E-Mail-Spezifikationen erfüllt. Wenn beide Bedingungen erfüllt sind, senden Sie eine E-Mail an die Adresse.
if Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' then
beginnen
//Den Inhalt der gesendeten E-Mail abrufen
emailMemo.Clear;
.................................
//Legen Sie die E-Mail-Informationen fest. Wenn beim Senden der E-Mail ein Fehler auftritt, beenden Sie den Vorgang direkt.
wenn tag=0 dann beenden;
//E-Mail senden
sendtoAdd := trim(Bmb.FieldByName('s_emailAddress').AsString); //Muss an...Mailbox gesendet werden
if emailAddressYesOrNo(sendtoAdd)= 'ok' then //Überprüfen Sie, ob das E-Mail-Format korrekt ist
beginnen
sendEmailOnce(emailusername,formAddress,receiptRecipientAddress,sendtoAdd,emailSubject); //E-Mail senden
i := i+1; //Zähler plus 1
list1.Items.Add(......); //Fügen Sie die Kandidateninformationen, die erfolgreich per E-Mail gesendet wurden, in die Liste ein
Ende;
//
Ende;
//Es bleibt jedes Mal 2 Sekunden lang stehen, wenn 50 E-Mails gesendet werden.
if (i mod 50) = 0 then sleep(2000);
dm_sjtj.ListBmb.next;
Application.ProcessMessages; //Prozessinformationen in der Schleife verarbeiten
//Fortschrittsanzeige aktualisieren
j := j+1;
PB.Fortschritt:=j;
PB.StepIt;
PB.Refresh;
Ende;
Endlich
tag := 0;
IdSMTP1.Disconnect;
Ende;
Ende;
showmessage('Total sent'+intToStr(i-1)+' emails.');
Ende;
7. Probleme, die Aufmerksamkeit erfordern
① Spam-E-Mails sind vom Land nicht erlaubt
② Da Massen-E-Mails von den meisten E-Mail-Anbietern kontrolliert werden, kommt es häufig zu einer Verzögerung zwischen zwei E-Mails. Es wird empfohlen, einen eigenen E-Mail-Server einzurichten.
③ Da die Indy-Steuerung nur über zwei Modi verfügt: atNone und atSASL, müssen Sie nach dem Einrichten des Mailservers eine IP-Adresse und ein Konto einrichten, die keiner Überprüfung bedürfen.
④ Da interne E-Mail-Adressen keine E-Mail-Antworten erhalten können, sind Antwortadresse und Absenderadresse häufig unterschiedlich eingestellt. Ein Problem, das jetzt auftritt, besteht darin, dass Sie beim Öffnen einer E-Mail über einen Browser nicht antworten können, aber eine Antwort erhalten können, nachdem Sie eine E-Mail über Foxmail erhalten haben. Dies erfordert Aufmerksamkeit.
Ich hoffe, dass dieser Artikel für alle bei der Delphi-Programmierung hilfreich sein wird.