L'exemple de cet article décrit la méthode d'envoi de messages électroniques en masse dans Delphi7. Partagez-le avec tout le monde pour votre référence. L’analyse spécifique est la suivante :
Pendant cette période, les informations sur les candidats et les informations sur l'examen doivent être envoyées à tous les candidats passant l'examen par e-mail. Après de nombreux débogages, cela est considéré comme un succès. Je l'envoie pour votre référence :
L'idée générale est :
1. Installez une version LAN du serveur de messagerie et configurez DNS pour que le serveur puisse envoyer des e-mails aux utilisateurs en dehors du réseau. Il existe de nombreux logiciels dans ce domaine, tels que WinWebMail, qui est bon et peut être téléchargé depuis le site officiel. site web;
2. Les contrôles qui doivent être utilisés : Indy10.0.15, qui peut être téléchargé via la recherche Baidu ;
3. Définissez le serveur de messagerie et les informations de compte à envoyer
Copiez le code comme suit : function setEmailInfo:integer; //Valeur renvoyée 0 : échec du paramètre de courrier électronique ; 1 : paramètre de courrier électronique réussi ;
var
selectStr:chaîne;
ce résultat : entier ;
commencer
ce résultat := 0;
//Créer un compte
IdSMTP1.AuthType := atNone; //ou atSASL;
IdSMTP1.Host := hostString;
IdSMTP1.Username := userNameString;
IdSMTP1.Password := passWordString;
essayer
IdSMTP1.connect;
ce résultat := 1;
sinon IdSMTP1.Authenticate alors
commencer
showmessage('L'envoi de la vérification du compte e-mail a échoué ! Veuillez vérifier les paramètres du compte SMTP !');
ce résultat := 0;
fin
sauf
showmessage('La connexion au serveur SMTP a échoué ! Veuillez vérifier si les paramètres du compte SMTP et le réseau sont normaux !');
ce résultat := 0;
fin
fin;
résultat := cerésultat ;
fin;
4. Envoyez un message par e-mail en tant que fonction indépendante et un contrôle du délai est requis lors de l'envoi.
Copiez le code comme suit : procédure sendEmailOnce(emailusername:string;
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
commencer
MsgKsbkxx.From.Name := emailusername; //Nom de l'expéditeur de l'e-mail
MsgKsbkxx.From.Address := formAddress; //Adresse de l'expéditeur de l'e-mail
MsgKsbkxx.ReceiptRecipient.Address := receptionRecipientAddress;
//Adresse de réponse, qui peut être différente de l'adresse de l'expéditeur de l'email
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd; //Adresse d'envoi ?
MsgKsbkxx.Sender.Address := formAddress; //sendtoAdd //Envoyer un e-mail à... l'adresse
MsgKsbkxx.Sujet := emailSujet; //Sujet
MsgKsbkxx.Body.Assign(emailMemo.Lines); //Contenu de l'e-mail
IdSMTP1.Send(MsgKsbkxx); //Commande d'envoi d'e-mail
fin;
5. Déterminez simplement la légitimité de l’adresse e-mail
Copiez le code. Le code est le suivant : // Séparez la chaîne s en plusieurs chaînes selon la représentation du séparateur de chaîne, et stockez-les dans la liste de chaînes rs.
procédure SeparateTerms2(s:string;Separator:string;var rs:TStringList);
var
AStr : chaîne ;
idx : entier ;
ASubStr : chaîne ;
commencer
AStr := Garniture(s);
tandis que Pos(Separator, AStr) > 0 fais
commencer
idx := Pos(Séparateur, AStr);
ASubStr := Copier(AStr, 1, idx - 1);
rs.Add(ASubStr);
AStr := Copier(AStr, idx + 1, Longueur(AStr));
fin;
if AStr+'a' <> 'a' then rs.Add(AStr); //S'il reste des chaînes, stockez-les dans la liste de chaînes
fin;
// Détermine si une chaîne répond à la norme d'adresse e-mail
//Correct : renvoie ok, erreur renvoie une erreur
fonction emailAddressYesOrNo (emailAddress:String):string;
var
getStrings:TStringList;
getOuiOuNon:string;
commencer
getYesOrNo := 'erreur';
getStrings := TStringList.Create;
SeparateTerms2(emailAddress,'@',getStrings);
si getStrings.Count=2 alors
commencer
getStrings.Clear;
SeparateTerms2(emailAddress,'.',getStrings);
si getStrings.Count>1 alors getYesOrNo := 'ok';
fin;
getStrings.Free;
résultat := getYesOrNo;
fin;
6. Envoyez des e-mails en masse
Copiez le code comme suit : procédure bEmailKsxxClick ;
var
AccordAmount,i,j,tag:entier;
emailusername,formAddress,sendtoAdd,emailSubject,receiptRecipientAddress,selectStr:string;
commencer
//Déterminez s'il y a des données dans la table de données qui doivent être envoyées par e-mail, et si oui, envoyez-les
si Bmb.RecordCount >0 alors
AccordAmount := Bmb.RecordCount
autre
sortie;
//
//Obtenir les informations du compte, généralement stockées dans une table de données ou un fichier INI
emailusername := userNameString; //Expéditeur de l'e-mail
formAddress := fromAddressString; //Envoi de l'adresse e-mail
réceptionRecipientAddress := réceptionRecipientAddressString; //Adresse e-mail de réponse
emailSubject := emailSubjectString; //Sujet de l'e-mail
//
tag := 1; //Bit d'indicateur : arrêt lors de l'envoi d'une erreur
i:=1; //Nombre total d'e-mails envoyés
j:=0; //Le nombre d'enregistrements traités pour faire avancer progressivement la barre de progression
list1.Clear; //Afficher les informations sur les étudiants dont les e-mails ont été envoyés avec succès
// Déterminez s'il peut être connecté à la boîte aux lettres définie. Si la valeur de retour est 1, obtenez le contenu de l'e-mail et les paramètres associés et envoyez-les.
si setEmailInfo = 1 alors
commencer
Pb.BlockSize := 1;
Pb.Max := AccordAmount ;
Formsjtj.Refresh;
Bmb.Premier ;
essayer
while (pas tBmb.Eof) fais
commencer
// Déterminez si l'adresse e-mail est vide et répond aux spécifications de l'e-mail. Si les deux conditions sont remplies, envoyez un e-mail à l'adresse.
si Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' alors
commencer
//Récupère le contenu de l'email envoyé
emailMemo.Clear;
........................
//Définissez les informations de l'e-mail. S'il y a une erreur lors de l'envoi de l'e-mail, quittez directement.
si tag=0 alors quittez ;
//Envoyer un email
sendtoAdd := trim(Bmb.FieldByName('s_emailAddress').AsString //Besoin d'envoyer à...boîte aux lettres);
if emailAddressYesOrNo(sendtoAdd)= 'ok' then //Vérifiez si le format de l'e-mail est correct
commencer
sendEmailOnce(emailusername,formAddress,receiptRecipientAddress,sendtoAdd,emailSubject //Envoyer un e-mail);
je := i+1; //compteur plus 1
list1.Items.Add(......); //Mettez les informations sur le candidat qui ont reçu des e-mails avec succès dans la liste
fin;
//
fin;
//Il s'arrêtera pendant 2 secondes à chaque fois que 50 e-mails seront envoyés.
si (i mod 50) = 0 alors dormir (2000) ;
dm_sjtj.ListBmb.next;
Application.ProcessMessages; //Traiter les informations sur le processus dans la boucle
//Actualiser l'indicateur de progression
j := j+1;
PB.Progress:=j;
PB.StepIt ;
PB.Actualiser ;
fin;
enfin
balise := 0;
IdSMTP1.Disconnect ;
fin;
fin;
showmessage('Total envoyé'+intToStr(i-1)+'e-mails.');
fin;
7. Questions nécessitant une attention particulière
① Les spams ne sont pas autorisés par le pays
② Étant donné que les e-mails en masse sont contrôlés par la plupart des fournisseurs de messagerie, il y a souvent un délai entre deux e-mails. Il est recommandé de configurer votre propre serveur de messagerie.
③ Étant donné que le contrôle Indy n'a que deux modes : atNone et atSASL, après avoir configuré le serveur de messagerie, vous devez configurer une adresse IP et un compte qui ne nécessitent pas de vérification ;
④ Étant donné que les adresses e-mail internes ne peuvent pas obtenir de réponses par e-mail, l'adresse de réponse et l'adresse d'envoi sont souvent définies pour être différentes. Un problème qui se pose maintenant est que vous ne pouvez pas répondre lorsque vous ouvrez un e-mail via un navigateur, mais vous pouvez obtenir une réponse après avoir reçu un e-mail via Foxmail. Cela nécessite une attention particulière.
J'espère que cet article sera utile à la programmation Delphi de chacun.