ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 2014
-
10 avril 2007 à 23:10
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 2014
-
11 avril 2007 à 10:13
Bonjour,
J'ai écrit (recopié), sans y comprendre grand chose, le code sous-cité, si quelqu'un peut me dire où est l'erreur pour que ça marche (je suis en PC WinX¨):
-----------------------
Sub Form_Activate()
Winsock1.Close
Winsock1.RemoteHost = "smtp.free.fr"
Winsock1.RemotePort = 25
Winsock1.Connect
End Sub
Si ca continue, je vais demander une carte de membre VBiste moi (Faut dire que sur ma planête ca bouge pas trop en ce moment ).
Je n'y connais rien en VB seulement des choses me choquent :
1)Deja tu utilises l'API winsock hors pour cela tu dois l'initialiser par WSAStartUp et la libérer par WSACleanUp(); (Pas sur la)
2) Tu envois des commandes via Winsock1.SendData cependant tu ne cherches pas à récupérer les messages : ce qui est primordial car la tu envois les commandes les unes apres les autres comme un bourrin .
3)Attention nombreux sont les serveurs qui n'utilisent plus HELO mais EHLO avec ensuite AUTH LOGIN suivit du login et du password du compte encodé en base 64.
4)Ensuite les retour à la ligne : ils me semblent qu'ils en manquent entre autre au niveau du sujet.
5)Apres l'envoit du "." il faut envoyer QUIT pour fermer proprement la connection.
6)Pour finir et c'est le plus important : le compte smtp que tu dois utiliser est celui de ton FAI. Autrement dit si tu es chez aol tu peux pas utiliser le smtp de free.
Ah oui juste une chose aussi lol : dans l'api winsock ce n'est pas l'adresse du smtp tel quel qu'il faut utiliser mais l' ip correspodant.
Dans mon langage ca ferait cela :
Function ResolveIP(ASMTPAddress:STRING) : STRING;
TYPE
TAPInAddr = ARRAY [0..100] OF PInAddr;
PAPInAddr =^TAPInAddr;
VAR
Index : Integer;
WSAData : TWSAData;
HostEnt : PHostEnt;
PInAddr : PAPInAddr;
BEGIN
Result:='';
WSAStartUp($101,WSAData);
TRY
HostEnt:=GetHostByName(pChar(ASMTPAddress));
IF HostEnt<>NIL THEN BEGIN
PInAddr:=PAPInAddr(HostEnt^.h_addr_list);
Index:=0;
WHILE PInAddr^[Index]<>NIL DO BEGIN
Result:=(inet_ntoa(PInAddr^[Index]^));
Inc(Index);
END;
END;
EXCEPT
END;
WSACleanUp();
END;
Allez quitte à flooder comme Jacques autant en remettre une couche :
La répétition des winsock1. ca fait un peu caca je trouve tu dois avoir un moyen de faire un ptit lifting à ton source genre
Sub Form_Activate()
With Winsock1 Do
Close
RemoteHost = "smtp.free.fr"
RemotePort = 25
Connect
End Sub
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 11 avril 2007 à 09:00
Salut,
Petite correction pour l'utilisation du bloc With
Sub Form_Activate()
With Winsock1
.Close
.RemoteHost = "smtp.free.fr" 'Tres bien reconnu par winsock
'=> RemoteHost : on peu mettre soit l'IP soit comme fait
.RemotePort = 25
.Connect
End With
End Sub , ----
[code.aspx?ID=41455 By Renfield]
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 11 avril 2007 à 09:44
Réponse à vous 3
Déjà merci, ça ne marche toujours pas, mais j'ai suivi vos instructions, (certaines), jugez, voici le code, la suite de mes questions après le code
---------------
Sub Form_Activate()
Winsock1.Close
Winsock1.RemoteHost = "smtp.free.fr"
Winsock1.RemotePort = 25
Winsock1.Connect
End Sub
Je ne suis pas VBiste cependant je te conseille de vérifier plusieurs choses :
1)Que ton provider est bien Free.
2)Que tu peux te connecter sans authentification (je crois que chez free il faut s'identifier : voir ma remarque sur la base 64).
3)Qu'il n'y a pas d'options à activer sur ton compte mail pour utiliser le smtp à distance
Pour le traitement des réponses en delphi ca ferait cela
Function ReceivedString(AString:String):Boolean;
VAR
StringReceived : ARRAY [0..2048] OF Char;
Begin
ZeroMemory(@StringReceived[0],SizeOf(StringReceived));
winsock.Recv(Sock,StringReceived,SizeOf(StringReceived),0);//=Winsock.SOCKET_ERROR) Or
IF(Copy(StringReceived,1,3)<>Astring) Then Result:=False Else Result:=True;
End;
ehjoe
Messages postés728Date d'inscriptionsamedi 4 avril 2009StatutMembreDernière intervention30 mars 20144 11 avril 2007 à 10:13
Réponse à vous deux, j'ai essayé sous dos avec telNet, ça donne ce qui suit, et marche:
------------
'telnet
'open smtp.free.fr 25
'helo nouveaux romans
'mail From: [mailto:nouveau@romans.fr nouveau@romans.fr]
'rcpt to: [mailto:adresse@free.fr adresse@free.fr]
'Data
'subject: Nos romans
'Nos nouveaux romans
'http://irolog.free.fr
'.
'quit
---------------
Non, on ne s'identifie pas par rapport à son fournisseur dans ce cas, ça c'est certain, car avec TelNet sous Dos ça passe, j'ai aussi essayé 2 exemples ici, du même genre, suivant ce qu'on écrit ça passe ou pas, mais jamais d'identification. Le problème c'est que quand je tente d'adapter, plus rien ne tourne, je crois même qu'il ne doit pas manquer grand chose pour que ça marche, un détail, mais lesquel...
Pour la gestion d'erreur en Delphi, merci, mais sauf erreur de ma part, nous sommes bine sur un formum VB6\Winsock, je peux donc espérer du code en VB...
Il faudrait, mais en VB, que l'on m'explique comment faire une gestion d'erreur, du type:
commande X
erreur retournée = Y
Si erreur retournée <> Z = affichage erreur + stop
etc...
Heu, c'est la ligne du milieu que je ne sais pas faire...
Avez-vous regardé les exemple que j'ai mis à votre dispo (à télécharger), il provient d'ici, généralement il fonctionne, vous verrez, c'est sur le même principe...
Ben si vous pouvez faire quelque chose pour moi, merci d'avance :o)