SendEmail avec des composants Indy
J'essaie d'envoyer un mail, mais j'ai un problème, cependant, j'ai trouvé ce code sur le web:
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdTCPConnection, IdTCPClient,
IdMessageClient, IdSMTP, IdBaseComponent, IdComponent, IdIOHandler,
IdExplicitTLSClientServerBase, IdSMTPBase
procedure SendSimpleMail;
var
Msg: TIdMessage;
DestAddr: TIdEmailAddressItem;
begin
Msg := TIdMessage.Create(Self); //error here
Msg.From.Text := 'name';
Msg.From.Address := '[email protected]';
Msg.Subject := 'Test';
DestAddr := Msg.Recipients.Add;
DestAddr.Text := 'name';
DestAddr.Address := '[email protected]';
Msg.Body.Add('simple test mail.');
tIdSMTP.Host := 'smtp.gmail.com';
tIdSMTP.Port := 25;
tIdSMTP.AuthenticationType := atLogin; //error here (2 error)
tIdSMTP.Username := '[email protected]';
tIdSMTP.Password := 'password';
tIdSMTP.Connect;
tIdSMTP.Authenticate;
tIdSMTP.Send(Msg);
tIdSMTP.Disconnect;
end;
Mais cependant, j'ai noté beaucoup de fautes et il me manque un composant d'Indy.
Les erreurs de compilation:
[DCC Error] Unit1.pas(36): E2003 Undeclared identifier: 'Self'
[DCC Error] Unit1.pas(46): E2233 Property 'Host' inaccessible here
[DCC Error] Unit1.pas(47): E2233 Property 'Port' inaccessible here
[DCC Error] Unit1.pas(48): E2003 Undeclared identifier: 'AuthenticationType'
[DCC Error] Unit1.pas(48): E2003 Undeclared identifier: 'atLogin'
[DCC Error] Unit1.pas(49): E2233 Property 'Username' inaccessible here
[DCC Error] Unit1.pas(50): E2233 Property 'Password' inaccessible here
[DCC Error] Unit1.pas(51): E2076 This form of method call only allowed for class methods
[DCC Error] Unit1.pas(52): E2076 This form of method call only allowed for class methods
[DCC Error] Unit1.pas(53): E2076 This form of method call only allowed for class methods
[DCC Error] Unit1.pas(54): E2076 This form of method call only allowed for class methods
[DCC Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
Merci pour l'aide à l'avance
Une chose est l'ajout de
ok merci, maintenant, les erreurs sont réduites, mais maintenant, sont des 3 erreurs (j'ai édité le premier post), j'ai Indy9 et Indy10, mais quand je clique sur idSMTP j'obtiens une erreur: Impossible de localiser le fichier idSMTP.pas
IdEMailAddress
à votre clause uses de faire le compilateur connaît le TIdEmailAddressItem
, mais une autre est que l'exemple est fondamentalement mauvais et c'est pour Indy 9 (en raison de atLogin
type d'authentification), quelle est la version de Indy utilisez-vous ? Vous pouvez vérifier si vous maintenez la CTRL
clé et cliquez sur par exemple IdSMTP
de votre clause uses et ensuite vérifier si le IdSMTP.pas
est stocké. Si c'est dans Indy9
ou Indy10
dossier.ok merci, maintenant, les erreurs sont réduites, mais maintenant, sont des 3 erreurs (j'ai édité le premier post), j'ai Indy9 et Indy10, mais quand je clique sur idSMTP j'obtiens une erreur: Impossible de localiser le fichier idSMTP.pas
OriginalL'auteur Giacomo King Patermo | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
Le code de votre question qui est écrit pour Indy 9 et à partir de votre erreur du compilateur semble que vous êtes en utilisant Indy 10. Pour vos erreurs du compilateur:
Undeclared identifier: Self
- leSelf
est le pointeur vers l'instance de la classe elle-même et, puisque vous n'avez pas écrit leSendSimpleMail
comme une méthode de classe, mais comme une procédure autonome, vous n'avez pas deSelf
juste parce que vous n'avez pas de n'importe quelle classe. La méthode de classe, vous pouvez écrire par exemple pour votre classe de formulaire, comme par exempleTForm1.SendSimpleMail
, où à l'intérieur de la méthode laSelf
aurait sens de laTForm1
exemple, la forme elle-même.Et le reste des erreurs que vous avez obtenu parce que vous aviez accès à la
TIdSMTP
de la classe, pas l'objet de l'instance. Couramment utilisé en pratique est de déclarer une variable locale, de créer une instance d'objet de l'affecter à la variable travail avec l'objet (variable) et de libérer l'instance de l'objet.Je voudrais essayer quelque chose comme ceci (testé avec Indy 10 livré avec Delphi 2009):
Je n'étais pas sûr, car, dans le
reference
il y a leatDefault
, mais dans la version livrée avec Delphi 2009, il est lesatDefault
. Donc, essayez d'utiliseratDefault
à la place.Grâce des travaux! 😀
Oui
satDefault
a été initialement nomméatDefault
en plus tôt Indy 10 versions et a été rebaptisée plus tard.Je veux juste ajouter une remarque. vous devez ajouter IdEMailAddress à utiliser TIdEmailAddressItem
OriginalL'auteur TLama
Pour google smtp, vous devez utiliser TLS ou SSL!
http://support.google.com/mail/bin/answer.py?hl=en&reponse=13287
Votre procédure de l'échantillon est d'écrire pour INDY9 et si vous utilisez INDY10 ne peux pas compiler.
Vous avez besoin de faire des ajustements.
tIdSMTP
, ne fonctionne pas avec la classe elle-même.Oui, vous avez raison.
OriginalL'auteur tico