Mail - socket - pk sa déconne ?!?

Résolu
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 29 déc. 2004 à 17:26
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 29 déc. 2004 à 23:17
Bonsoir,

Alors la, jvous en prie aidez moi avant que je ne prenne mon clavier, ma souris, mon modem et tout le reste et que je les cognent du +fort que je peux contre le mur!!! J'en ai marre, j'en ai +que marre!!! Pk ça marche pas!!!! J'ai trouvé des codes tout fait sur le net qui marchent eux, et quand moi je veux en faire de même, ça déconne!!!!

ou est la différence entre ces 2 codes ????

code qui marche:

int SendMail(char *szAddr, int iPort, char *szDomain, char *szSource, char *szDest, char *szSubject, char *szMessage, bool iHTML, unsigned int iPriority, char *szAttach) { 

  char *szBuffer;
  char *szNameAttach;
  char *szTmp;

  unsigned int i = 0;
  unsigned int i_back = 0;

  szBuffer = new char[SIZE_MSG_MAX];

  WSADATA wsa;
  WSAStartup(MAKEWORD(2,2), &wsa);

 /* Création du socket */
  dasock = socket(AF_INET, SOCK_STREAM, 0);
   
  if (isalpha(szAddr[0])) {
         
    // Ce n'est pas une ip */
    LPHOSTENT hp;
    hp = gethostbyname(szAddr);
  
    if (!hp) return 0;

    byte_copy( hp->h_addr, &dasin.sin_addr.s_addr, hp->h_length );
  }
  
  else
   dasin.sin_addr.s_addr = inet_addr(szAddr);

  dasin.sin_family = AF_INET;
  dasin.sin_port = htons(iPort);

   char cnt[55];
   wsprintf(cnte, "%d", dasin.sin_addr);
   MessageBox(0, cnte, ":)", 0);
  /* Attachement du socket */
  if (connect(dasock, ( SOCKADDR * ) &dasin, sizeof( dasin )) == SOCKET_ERROR ) {
   
   MessageBox(0, "Can't connect to server! lol, c pô marrant!!", ":s", 0);     
   closesocket(dasock);
   return 0;
  }


Mon code à moi, dans une DLL...


typedef struct {
 
   char* szFrom;
   char* szTo;
   char* szAlias;
   char* szSubject;
   char* szMessage; 
   char* szFiles;
   char* smtpServer;
    
 } EMAIL, *LPEMAIL;

bool DLLEXPORT SendEmail(EMAIL _mail) {
  
  WSADATA wsa;
  WSAStartup(MAKEWORD(2,2), &wsa);
  
  int result;
  
  if((result = VerifEmail(&_mail)) != 0) {       
    
    SetLastEmailError(result);    
    return false;
   }     
  
  sock = socket(AF_INET, SOCK_STREAM, 0);
  
  if (sock == SOCKET_ERROR) {
   
    SetLastEmailError(MAIL_ERROR_SOCKET);
    return false;     
   }
  
  if(isalpha(_mail.smtpServer[0])) {
   
    LPHOSTENT host;
    host = gethostbyname(_mail.smtpServer);
    
    if(!host) {
     
      SetLastEmailError(MAIL_ERROR_SERVER);
      return false;   
     }
    
    CopyTo(&host->h_addr, &addr.sin_addr.s_addr, host->h_length);     
   }

  else
    addr.sin_addr.s_addr = inet_addr(_mail.smtpServer);
        
  addr.sin_port = htons(port);
  addr.sin_family = AF_INET;
  
char cnte[55];
   wsprintf(cnte, "%d", addr.sin_addr);
   MessageBox(0, cnte, ":)", 0);
  
  if(connect(sock, (SOCKADDR*) &addr, sizeof(addr)) == SOCKET_ERROR) {
   
    SetLastEmailError(MAIL_ERROR_CANTCONNECT);
    return false;     
   }


En fait, l'envoi d'un objet EMAIL par le programme appelant la DLL se passe bien! Le seul pb, c'est que l'affichage des 2 MessageBox() qui affiche la char* cnte sont différents et je en sais pas pourquoi!!!! ce qui donne pour conséquence que addr.sin_addr est différent dans les 2cas!!! et biensur, dans mon code à moi, ça ne marche pas!!!! Que faut-il que je fasse ???
Je ne pense pas que cela puisse venir de le dll car j'ai fait le test en transportant toutes les fonctions de ma dll dans un projet .exe....et tjs rien!!! je ne call rien (le but est de se connecter à un server smtp) :s

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))

4 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
29 déc. 2004 à 18:12
Salut,
CopyTo(&host->h_addr, &addr.sin_addr.s_addr, host->h_length);
Moi je vois un & en plus dans cette ligne.
3
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
29 déc. 2004 à 22:45
aardman, je ne compred pas très bien ta réplique....:s je ne comprend pas ce qui cloche...:(, voici la définition de la fonction CopyTo:

void CopyTo(void* source, void* dest, int size) {
 
  char* src = (char*) source;
  char* des = (char*) dest;
  
  for(int i = 0; i < size; i++)
   des[i] = src[i];   
 } 


comme c'est 2 void*, faut mettre deux &, non ? enfin, je ne sais pas! dis moi ce que t'en pense...

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
29 déc. 2004 à 23:01
nana c débile ce ke je viens de dire, sa marche sans et comme le source na pas besoin detre modifié, c bon :) g enlevé, la mnt cnte me retourne une val négative, mai on apprch du but, g dja eu cte valeur ac un prog qui marchait dc c sur la bonne voie!! :-)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
29 déc. 2004 à 23:17
C'est bon, pb résolu!! Merci aardman!!! :-)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
0
Rejoignez-nous