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

Linux Discussion :

envoie mail c++


Sujet :

Linux

  1. #1
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut envoie mail c++
    Bonjour à tous,

    Je suis entrain de réaliser une application qui envoie un mail avec une pièce jointe.

    Je développe avec C++ sous linux (OpenSuse 10.1)

    JE doid donc configurer le serveur smtp , je crois sur le localhost:25

    Pouvez vous m'aider sur ce sujet.

    En plus je dois développer l'application d'envoie en utilisant les sockets.
    Si quelqu'un possède le code de développement de ce type d'application.

    Je suis trop pressé par le temps et je dois faire cette partie de mon projet.

    Merci pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 23
    Points
    23
    Par défaut
    Bonjour,
    Tu peut trouver de la doc sur le site IpRelax.fr

  3. #3
    Inscrit
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 60
    Points
    60
    Par défaut
    j'ai consulté le site IpRelax.fr et j'ai trouvé un code d'envoie de mail

    Le code est le suivant:

    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
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <netdb.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
     
    #define DEBUG 0 /* Attention il y des pb si le msg envoye contient des % */
     
    #define PACKET_SIZE  1024
     
    void appli(char *f);
    int writen(int fd, char *ptr, int n);
    int readn(int fd, char *ptr, int n);
     
    int to_server_socket = -1;
    char server_name[] = "smtp.gmail.com";  /* nom du host du serveur */
    int port = 25;
    char helo[] = "helo plus.bas\n";
    char from[] = "mail from: <fatma.sarhan@gmail.com>\n";
    char to[] = "rcpt to: <nejiba.taher@gmail.com>\n";
     
    char subject[] = "Subject: transfert ";
     
     
    int main (int argc, char *argv[])
    {
        struct sockaddr_in serverSockAddr;    /* addresse de la socket */
        struct hostent *serverHostEnt;        /* description du host serveur */
        unsigned long hostAddr;                       /* addr du serveur */
        char *filename;
     
        if ( argc == 2 ) filename = argv[1];
        else filename = NULL; /* use stdin */
     
        bzero(&serverSockAddr,sizeof(serverSockAddr));
        /* converti l'adresse ip 9.100.1.1 en entier long */
        hostAddr = inet_addr(server_name);
     
        if ( (long)hostAddr != (long)-1)
                bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
        else                                /* si on a donne un nom  */
        {
                serverHostEnt = gethostbyname(server_name);
                if (serverHostEnt == NULL)
                {
                        printf("probleme gethost\n");
                        exit(0);
                }
                bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,
                      serverHostEnt->h_length);
        }
     
        serverSockAddr.sin_port = htons(port);   /* host to network port  */
        serverSockAddr.sin_family = AF_INET;     /* AF_*** : INET=internet */
        /* creation de la socket */
     
        if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0)
        {
                printf("probleme creation socket client\n");
                exit(0);
        }
     
        /* requete de connexion */
        if(connect(to_server_socket,(struct sockaddr *)&serverSockAddr,
                   sizeof(serverSockAddr))<0)
        {
                printf("probleme demande de connection\n");
                exit(0);
        }
        appli(filename);
     
        /* fermeture de la connection */
        shutdown(to_server_socket,2);
        close(to_server_socket);
        return 0;
    }
     
    void appli (char *filename) {
    char buf[PACKET_SIZE+1], *ptr;
    FILE *bulk;
    int nb;
     
            if (filename == NULL) {
              bulk = stdin;
            } else {
                if ( ( bulk = fopen(filename,"rb")) == NULL ) {
                        printf ( "can't open file to read\n" );
                        exit(1);
                }
            }
            buf[0] = 0x00;
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
            writen(to_server_socket,helo,strlen(helo));
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
            writen(to_server_socket,from,strlen(from));
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
            writen(to_server_socket,to,strlen(to));
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
            writen(to_server_socket,"data\n",6);
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
     
            sprintf(buf,"%s %s\n\n", subject,
                                  (( filename == NULL ) ? "STDIN" : filename ) );
            writen(to_server_socket,buf,strlen(buf));
    /* the file */
            while ( !feof(bulk) ) {
              bzero(buf, PACKET_SIZE+1);
              nb = fread(buf,sizeof(char), PACKET_SIZE, bulk);
              buf[nb] = 0x00;
              while ( (ptr = strstr(buf,"\r\n.\r\n") ) != NULL ) *(ptr+3) = '.';
              writen(to_server_socket,buf,nb);
              if (DEBUG) printf(buf);
            }
     
            writen(to_server_socket,"\r\n.\r\n",5);
            readn(to_server_socket,buf,PACKET_SIZE);
            printf(buf);
     
     
            fclose(bulk);
    }
     
    int writen(int fd, char *ptr, int n)
    {
     
    int nl, nw;
            nl = n;
            while ( nl > 0 ) {
                    nw = write(fd, ptr, nl);
                    if ( nw <= 0 )
                            return nw;     /*error*/
                    nl -= nw;
                    ptr += nw;
            }
            return (n-nl);
    }
     
     
    int readn(int fd, char *ptr, int n){
    int nl, nr;
     
            nl = n;
            while ( nl > 0 ) {
                    nr = read(fd,ptr,nl);
                    if (nr < 0 )
                            return nr;     /*error*/
                    else
                            if ( nr == 0 )
                                    break;
                    nl -= nr;
                    ptr += nr;
                    if ( *(ptr-2) == '\r' &&  *(ptr-1) == '\n' )
                      break;
            }
            *ptr = 0x00;
            return (n-nl);
    }

    j'ai compilé avec "g++ -Wall -o mail mail.cpp"

    et ça marche pour la compilation

    lors de l'execution "./mail mail.txt"

    je reçois cette réponse "probleme demande de connection"

    pouvez vous m'aider à trouver la source de ce message est ce que le nom du serveur smtp qui est incorrecte (j'ai testé smtp.gmail.com) ou autre chose.

    Merci d'avance.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 31
    Points : 41
    Points
    41
    Par défaut
    Il y a des fournisseurs Internet, par exemple free.fr, qui bloquent l'accès a un SMTP autre que celui fourni par le fournisseur lui-même.
    Pour voir si tu as accès a un SMTP il suffit de faire un telnet sur le port 25.
    Voici un exemple:

    [pxx@prs ~]$ telnet smtp.free.fr 25
    Trying 212.27.48.4...
    Connected to smtp.free.fr (212.27.48.4).
    Escape character is '^]'.
    220 smtp3-g19.free.fr ESMTP Postfix

    Utilises donc le smtp de ton fournisseur


    Par contre, ton code envoie simplement un email mais pas avec une pièce jointe, car il manque la gestion de types mime et l'encodage..

Discussions similaires

  1. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 12h17
  2. Envoi mail avec Outlook accusé de réception
    Par KapoueMan dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2005, 11h41
  3. envoi mail avec piece jointe fichier excel
    Par flogreg dans le forum ASP
    Réponses: 12
    Dernier message: 20/12/2004, 17h02
  4. [Envoi mails]Récupérer les enregistrements MX d'un domaine
    Par streetpc dans le forum Développement
    Réponses: 7
    Dernier message: 09/06/2004, 21h00
  5. pb envoi mail CDONTS
    Par flatron dans le forum ASP
    Réponses: 2
    Dernier message: 30/12/2003, 17h23

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