IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Les E-Mails sont envoyés, sauf s'ils sont longs !?


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Les E-Mails sont envoyés, sauf s'ils sont longs !?
    Bonjour à tous !

    Etant débutant et étant curieux d'apprendre, j'ai copier un bout de code pour essayer de me faire un programme et apprendre le fonctionnement de celui-ci.

    Le but du code ci-dessous est de lire un fichier (log.txt) et de l'envoyer par mail, mais le problème que j'ai, c'est que si le fichier n'a pas trop de caractère, il passe, et s'il en a bcp, il ne passe pas (n'est pas envoyé...). Aurais-tu une idée ? Serait-ce les buffers ? N'étant que débutant en programmation, j'ai essayé de changer la grandeur des buffers, mais sans succès...

    P.S: n'oubliez pas de changer les 3 variables : mailserver, mailto, mailfrom

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #include <windows.h>
    #include <stdio.h>
    #include <winuser.h>
    #include <windowsx.h>
    #include <time.h>
     
    char mailserver;
    char mailto;
    char mailfrom;
    char mailsubject;
     
    #define mailserver "ton.serveur.smtp"
    #define mailto "adresse@mail.destinataire"
    #define mailfrom "adresse@mail.delenvoyeur"
    #define mailsubject "Logged"
    #define BUFSIZE 800
    #define waittime 500
     
    // Attention !!! Il ne faut pas qu'il y ait des points dans le fichier texte, sinon ça signifie que c'est la fin du mail !!!
     
    int main () {
     
        # define TAILLE_MAX 100000
        SOCKET sockfd;
        WSADATA wsaData;
        FILE* fichier = NULL;
        char mailline[TAILLE_MAX] = "";
     
        #define bufsize 10000
        int bytes_sent;   /* Sock FD */
        int err;
        struct hostent *host;   /* info from gethostbyname */
        struct sockaddr_in dest_addr;   /* Host Address */
        char line[1000];
        char *Rec_Buf = (char*) malloc(bufsize+1);
     
        fichier = fopen("C:\\log.txt", "r");        
        if (fichier != NULL)
        {
     
     
            if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
              WSACleanup();
              return -1;
            }
            if ( (host=gethostbyname(mailserver)) == NULL) {
               perror("gethostbyname");
               exit(1);
            }
            memset(&dest_addr,0,sizeof(dest_addr));
            memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);
     
     
             /* Prepare dest_addr */
             dest_addr.sin_family= host->h_addrtype;  /* AF_INET from gethostbyname */
             dest_addr.sin_port= htons(25); /* PORT defined above */
     
     
             /* Get socket */
             if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
                perror("socket");
                exit(1);
                }
     
     
             /* Connect !*/
            if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
                perror("connect");
                exit(1);
                }
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             strcpy(line,"helo me.somepalace.com\n");
             bytes_sent=send(sockfd,line,strlen(line),0);
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             strcpy(line,"MAIL FROM:<");
             strncat(line,mailfrom,strlen(mailfrom));
             strncat(line,">\n",3);
             bytes_sent=send(sockfd,line,strlen(line),0);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             strcpy(line,"RCPT TO:<");
             strncat(line,mailto,strlen(mailto));
             strncat(line,">\n",3);
             bytes_sent=send(sockfd,line,strlen(line),0);
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             strcpy(line,"DATA\n");
             bytes_sent=send(sockfd,line,strlen(line),0);
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             sleep(waittime);
             strcpy(line,"To:");
             strcat(line,mailto);
             strcat(line,"\n");
             strcat(line,"From:");
             strcat(line,mailfrom);
             strcat(line,"\n");
             strcat(line,"Subject:");
             strcat(line,mailsubject);
             strcat(line,"\n");
     
             while (fgets(mailline, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
             {
                   strcat(line,mailline);
                   printf("%s", mailline); // On affiche la chaîne qu'on vient de lire
             }
     
             fclose(fichier); // On ferme le fichier qui a été ouvert
             strcat(line,"\r\n.\r\n"); // . du fin du mail !
             bytes_sent=send(sockfd,line,strlen(line),0);
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
             strcpy(line,"quit\n");
             bytes_sent=send(sockfd,line,strlen(line),0);
             sleep(waittime);
             err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';                         
             #ifdef WIN32
             closesocket(sockfd);
             WSACleanup();
             #else
             close(sockfd);
             #endif
     
             _sleep(3000);
        }
        else
        {
            // On affiche un message d'erreur si on veut
        }
    }
    Merci !

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Très bizarre comme façon de faire...

    Dans la lecture du mail à envoyer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             while (fgets(mailline, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
             {
                   strcat(line,mailline);
                   printf("%s", mailline); // On affiche la chaîne qu'on vient de lire
             }
    Donc la variable line va contenir tout le mail à envoyer. Il doit être suffisament grand.

    Mais sa déclaration est :

    et il n'y a aucune vérification de dépassement... Donc pas bon...

    Jc

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Nickel merci bien ça fonctionne ! Mais tu as dit que c'était une drôle façon de faire. Mais aurais-tu par hasard un bon exemple pour l'envoi de mail ?

    Merci encore !

    ++

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par wappyboy
    Nickel merci bien ça fonctionne ! Mais tu as dit que c'était une drôle façon de faire. Mais aurais-tu par hasard un bon exemple pour l'envoi de mail ?

    Merci encore !

    ++
    J'enverrais au fur et à mesure de la lecture. Sans passer par un gros tampon... Cela dépend si l'utilisation du réseau est un facteur ou non...

    Jc

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Vu que c'est qu'un mail et que je n'ai pas une connexion 56k, je ne pense pas que le facteur réseau joue un rôle pour ma part.
    Merci, j'attends avec impatience ton prochain post.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/08/2014, 02h26
  2. Réponses: 1
    Dernier message: 21/06/2010, 11h19
  3. Les e-mails envoyés sont considérés comme du spam
    Par etters dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/06/2009, 15h06
  4. Réponses: 1
    Dernier message: 02/12/2008, 23h55
  5. [Mail] Les e-mails dans Bcc ne sont pas envoyés
    Par Klimium dans le forum Langage
    Réponses: 4
    Dernier message: 23/08/2007, 12h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo