Bonsoir tout le monde.
J'ai un petit problème pour envoyer mes emails.
En effet, lorsque j'envoie un email, tout s'exécute correctement puis au moment t'en relancé un autre, je suis confronté à cette erreur:

Le projet Dapm.exe a provoqué une classe d'exeption EAccessViolation avec le message 'Violation d'accès à l'adresse 00401D66 dans le module 'Dapm.exe'. Lecture de l'adresse 00000000'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
J'ai pourtant réalisé la fonction suivante en m'appuyant sur les codes que j'ai pu trouvé sur le forum:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
//Fonction qui va envoyer un email.
void __fastcall TForm1::EnvoieEmail(AnsiString SujetMail, AnsiString Textemail, char HostMail[50], char PortMail[50], char IdentifiantMail[50], char MdpMail[50], char EmeteurMail[50], char RecepteurMail[50])
{
        //Si la connexion est ouverte, on ferme la connexion du composant.
        if(Form1->IdSMTP1->Connected()) { Form1->IdSMTP1->Disconnect(); }
 
        //Si la connexion est fermé.
        if(!Form1->IdSMTP1->Connected())
        {
                //Déclaration aux composant des données de connexions.
                Form1->IdSMTP1->Host = HostMail;
                Form1->IdSMTP1->Port = atoi(PortMail);
                Form1->IdSMTP1->UserId = IdentifiantMail;
                Form1->IdSMTP1->Password = MdpMail;
 
                //Si le nom d'utilisateur et le password ne sont pas valide.
                if((Form1->IdSMTP1->UserId.Trim().Length() == 0) && (Form1->IdSMTP1->Password.Trim().Length() == 0))
                {
                        //Utilisera pas l'authentification.
                        Form1->IdSMTP1->AuthenticationType = atNone;
                }
                else
                {
                        //Utilisera l'authentification.
                        Form1->IdSMTP1->AuthenticationType = atLogin;
                }
 
                //Lance la connexion.
                Form1->IdSMTP1->Connect();
        }
 
        //Si l'authentification est correct.
        if(Form1->IdSMTP1->Authenticate())
        {
                //Charge dans le composant IdMessageMail les données nécéssaires.
                Form1->IdMessageMail->From->Address = EmeteurMail;
                Form1->IdMessageMail->From->Name = Form1->NomLogiciel + Form1->VersionLogiciel;
                Form1->IdMessageMail->ReplyTo->EMailAddresses = EmeteurMail;
                Form1->IdMessageMail->Recipients->Add();
                Form1->IdMessageMail->Recipients->EMailAddresses = RecepteurMail;
                Form1->IdMessageMail->Recipients = Form1->IdMessageMail->Recipients;
                Form1->IdMessageMail->Subject = SujetMail;
                Form1->IdMessageMail->Body->Add(Textemail);
                Form1->IdSMTP1->Send(Form1->IdMessageMail);
                Form1->IdMessageMail->Clear();
        }
        else
        {
                //En cas déchec d'authentification.
                ShowMessage("Erreur d'authentification!");
        }
 
        //Déconnecte le composant IdSMTP1.
        Form1->IdSMTP1->Disconnect();
 
        //Netoie les données du composant.
        Form1->IdSMTP1->Free();
 
        //Netoie les données de IdMessageMail.
        Form1->IdMessageMail->Free();
}
Je vous met aussi le code qui appel la fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
//L'utilisateur effectue un jet de dès et envoie le résultat par email.
 
void __fastcall TForm1::BitBtnAleaMailClick(TObject *Sender)
{
        //Déclare une variable pour y placé le résultat aléatoire.
        int ValAlea;
 
        //Envoie pour calcul aléatoire le contenu de sélection de dès.
        //Minima 1 et maxima la valeur du ComboBoxDes.
        ValAlea = JetDeDes(1, StrToInt(ComboBoxDes->Text));
 
        //Affiche dans LblResultat le résultat seul du dès.
        LblResultat->Caption = "Résultat du jet: " + IntToStr(ValAlea);
 
        //Si le champ action est vide
        if(EditAction->Text.IsEmpty())
        {
                //Affiche dans RichEditLog le résultat du dès sans le contenu de EditAction.
                RichEditLog->Lines->Add("Vous avez sélectionné le dès " + ComboBoxDes->Text + ".");
                RichEditLog->Lines->Add("Résultat: " + IntToStr(ValAlea));
                RichEditLog->Lines->Add("");
        }
        else
        {
                //Affiche dans RichEditLog le résultat du dès et de l'action avec le contenu de EditAction.
                RichEditLog->Lines->Add("Vous avez sélectionné le dès " + ComboBoxDes->Text + ".");
                RichEditLog->Lines->Add("Action: " + EditAction->Text + ".");
                RichEditLog->Lines->Add("Résultat: " + IntToStr(ValAlea));
                RichEditLog->Lines->Add("");
        }
 
/*      ************************************************************************************
                Initialisation des éléments nécéssaires à l'envoie d'email.
                On utilisera IdSMTP -> Indy - Clients qui permet l'envoie d'email.
                On utilisera IdMessage -> Indy - Divers qui permet l'écriture du message à envoyer.
 
                /!\ Cette section est isolée et soumise à un maintient permanent du code.
        ************************************************************************************    */
 
        //Déclaration des variables nécéssaires à la récupération des données nécéssaires à l'envoie d'email.
        char MailHost[50], MailPort[50], MailIdentifiant[50], MailMdp[50], MailEmeteur[50], MailRecepteur[50];
        char CheminPreferenceIni[100];
 
        //Regarde dans Préférence.ini les données et les affectes aux variables.
        AnsiToChar(CheminPreferenceIni, DestPreferenceIni);
 
        GetPrivateProfileString("Mail", "Host", "@", MailHost, sizeof(MailHost), CheminPreferenceIni);
        GetPrivateProfileString("Mail", "Port", "@", MailPort, sizeof(MailPort), CheminPreferenceIni);
        GetPrivateProfileString("Mail", "Identifiant", "@", MailIdentifiant, sizeof(MailIdentifiant), CheminPreferenceIni);
        GetPrivateProfileString("Mail", "MotDePasse", "@", MailMdp, sizeof(MailMdp), CheminPreferenceIni);
        GetPrivateProfileString("Mail", "EmailEnvoie", "@", MailEmeteur, sizeof(MailEmeteur), CheminPreferenceIni);
        GetPrivateProfileString("Mail", "Emaildestinataire", "@", MailRecepteur, sizeof(MailRecepteur), CheminPreferenceIni);
 
        //On Crée le texte qui sera envoyer par email.
        AnsiString TexteMail, SujetMail;
 
        //Sujet du mail.
        SujetMail = NomLogiciel + " - Valeur aléatoire transmise par un joueur.";
 
        //Message de l'email.
        TexteMail = "Bonjour, \r";
        TexteMail += "Ceci est un email qui est envoyer automatiquement par le logiciel " + NomLogiciel + " version " + VersionLogiciel + ". \r";
        TexteMail += "Une personne à réaliser un jet de dès: \r\r";
 
        //Si le champ action est vide
        if(EditAction->Text.IsEmpty())
        {
                //Affiche dans le mail le résultat du dès sans le contenu de EditAction.
                TexteMail += "Sélection du dès " + ComboBoxDes->Text + ".\r";
                TexteMail += "Résultat: " + IntToStr(ValAlea) + ".";
        }
        else
        {
                //Affiche dans RichEditLog le résultat du dès et de l'action avec le contenu de EditAction.
                TexteMail += "Sélection du dès " + ComboBoxDes->Text + ".\r";
                TexteMail += "Action: " + EditAction->Text + ".";
                TexteMail += "Résultat: " + IntToStr(ValAlea) + ".";
        }
 
        //On envoie vers la fonction l'autorisation de lavcer l'email.
        //EnvoieEmail(AnsiString SujetMail, AnsiString Textemail, char HostMail, char PortMail, char IdentifiantMail, char MdpMail, char EmeteurMail, char RecepteurMail)
        EnvoieEmail(SujetMail, TexteMail, MailHost, MailPort, MailIdentifiant, MailMdp, MailEmeteur, MailRecepteur);
}
//---------------------------------------------------------------------------
Auriez vous une solution à me proposer pour rectifier ce problème s'il vous plait ?
Je vous remercie par avance.
Cordialement.