Comment faire un mail Winsock ???

ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 10 avril 2007 à 23:10
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 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


Sub Winsock1_Connect()
  Winsock1.SendData "HELO mailing" & vbCrLf
  Winsock1.SendData "MAIL FROM: [mailto:ROM@NS.fr ROM@NS.fr]" & vbCrLf
  Winsock1.SendData "RCPT TO: ######[mailto:######@free.fr @free.fr]" & vbCrLf
  Winsock1.SendData "DATA" & vbCrLf
  Winsock1.SendData "SUBJECT: Nouveaux ROMANS" & vbCrLf
    Winsock1.SendData "Les nouveaux ROMANS" & vbCrLf
    Winsock1.SendData "http://stores.lulu.com/EhJoe" & vbCrLf
  Winsock1.SendData "." & vbCrLf
  Winsock1.Close
  Unload Form1
  End
End Sub
--------------
Merci.
Joe.

8 réponses

Utilisateur anonyme
11 avril 2007 à 00:05
Salut,

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.
0
Utilisateur anonyme
11 avril 2007 à 00:10
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;

Je te laisse retranscrire
0
Utilisateur anonyme
11 avril 2007 à 00:13
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

   
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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]

@+: Ju£i?n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
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


Sub Winsock1_Connect()
  Winsock1.SendData "EHLO mailing" & vbCrLf
  Winsock1.SendData "MAIL FROM: [mailto:ROM@NS.fr ROM@NS.fr]" & vbCrLf
  Winsock1.SendData "RCPT TO: [mailto:irolog@free.fr irolog@free.fr]" & vbCrLf
  Winsock1.SendData "DATA" & vbCrLf
  Winsock1.SendData "SUBJECT: Nouveaux ROMANS" & vbCrLf
    Winsock1.SendData "Les nouveaux ROMANS" & vbCrLf
    Winsock1.SendData "http://stores.lulu.com/EhJoe" & vbCrLf
  Winsock1.SendData "." & vbCrLf
  Winsock1.SendData "QUIT" & vbCrLf
  Winsock1.Close
  Unload Form1
  End
End Sub
------------

Alors svp, au plus simple en vrai VB (que des procédures), comment je vous prie, faire une routine d'erreurs, que nous sachions où ça plante ???

La source se trouve ici:

http://infologiciels.free.fr/mailing/

Merci, bien cordialement.

Joe.
0
Utilisateur anonyme
11 avril 2007 à 09:49
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

@+
0
Utilisateur anonyme
11 avril 2007 à 09:51
Ben oui mon grand mais non

Winsock1.SendData "EHLO mailing" & vbCrLf

Tu as oublié le login et le password à encodé en base 64 (voir wikipedia il y a un lien pour faire cet encodage ;) ).

Winsock1.SendData "EHLO mailing" & vbCrLf
Winsock1.SendData "zZddsadsqd==" & vbCrLf
Winsock1.SendData "dsadfd==" & vbCrLf

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;

A toi de retranscrire

@+
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
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)

Joe.
0
Rejoignez-nous