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 :

erreur client smtp


Sujet :

Réseau C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut erreur client smtp
    Bonsoir,
    dans le cadre d'un cours je dois faire un client smtp capable d'envoyer un mail. Je me suis inspiré de beaucoup d'exemples sur le net, mais mon code refuse de marcher.
    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
     
    #include <stdio.h>
     
    #include <netdb.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
     
     
    static void sendmail_write(const int  sock,const char *str,const char *arg)
    {
        char buf[500];
     
        if (arg != NULL)
            snprintf(buf, sizeof(buf), str, arg);
        else
            snprintf(buf, sizeof(buf), str);
     
        printf("%s \n",buf);
     
        send(sock, buf, strlen(buf), 0);
    }
     
    static int sendmail(const char *from,const char *to,const char *subject,const char *body,const char *hostname,const int   port)
    {
        struct hostent *host;
        struct sockaddr_in saddr_in;
        int sock;
     
     
        sock = socket(AF_INET, SOCK_STREAM, 0);
        host = gethostbyname(hostname);
     
        saddr_in.sin_family      = AF_INET;
        saddr_in.sin_port        = htons((u_short)port);
        saddr_in.sin_addr.s_addr = 0;
     
        memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);
     
        if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1)
        {
            return -2;
        }
     
        sendmail_write(sock, "HELO %s\n",       from);
        sendmail_write(sock, "MAIL FROM: %s\n", from);
        sendmail_write(sock, "RCPT TO: %s\n",   to);
        sendmail_write(sock, "DATA\n",          NULL);
     
        sendmail_write(sock, "Subject: %s\n",   subject);
        sendmail_write(sock, "From: %s\n",      from);
        sendmail_write(sock, "To: %s\n",        to);
     
     
        sendmail_write(sock, "\n",              NULL);
     
        sendmail_write(sock, "%s\n",            body);    // data
     
        sendmail_write(sock, ".\n",             NULL);    // end data
        sendmail_write(sock, "QUIT\n",          NULL);    // terminate
     
        close(sock);
     
        return 0;
    }
     
     
    int main(int argc, char *argv[])
    {
        char texte[100];
        char texte1[100];
        char texte2[200];
        char texte3[1024];
        char texte4[100];
     
        //from
        printf("votre addresse: \n");
        scanf("%s",texte);
        char * from = texte;
     
        //destinataire
        printf("destinataire: \n");
        scanf("%s",texte1);
        char * to = texte1;
     
        //sujet
        printf("sujet: \n");
        scanf("%s",texte2);
        char * sujet = texte2;
     
        //corps du texte
        printf("texte: \n");
        scanf("%s",texte3);
        char * data = texte3;
     
        //hostname
        printf("hostname: \n");
        scanf("%s",texte4);
        char * hN = texte4;
     
        int ret = sendmail(
                      from,   /* from     */
                      to,       /* to       */
                      sujet,              /* sujet  */
                      data,                 /* data    */
                      hN,             /* hostname */
                      25                      /* port     */
                  );
     
        if (ret != 0)
            fprintf(stderr, "erreur d'envoi du mail (code: %i).\n", ret);
        else
            fprintf(stdout, "mail envoyé avec succès à %s.\n", to);
     
        return ret;
    }
    le programme m'indique que le mail est envoyé, mais je ne recois rien.
    merci d'avance de votre aide.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Hello,

    Ce que tu as écrit jusqu'ici est déjà honorable. Toutefois :

    • Le paramètre de la première commande « HELO » n'est pas l'adresse de l'expéditeur, mais le nom du domaine du serveur SMTP auquel ton client s'est connecté. Un peu comme pour les name based virtual hosts sur le Web ;
    • Entre chaque ligne, il faut attendre que le serveur te réponde et vérifier si le code de retour est bien celui que tu attends. Ça complique un peu l'affaire mais rien de bien sorcier. Il faut aussi faire remonter l'erreur en cas de problème ;
    • À moins que ton programme soit fait pour se connecter à un serveur de test mis en place par ton professeur, il y a de fortes chances pour qu'aujourd'hui, tous les serveurs SMTP auxquels tu vas te connecter refusent l'open relay et t'obligent à t'authentifier si tu veux envoyer un mail.

Discussions similaires

  1. [Source] Composant Client Smtp pour envoi d'Emails
    Par Delbeke dans le forum Vos contributions VB6
    Réponses: 11
    Dernier message: 09/12/2010, 11h08
  2. [Validator] erreur client+serveur lors de la validation
    Par PoichOU dans le forum Struts 1
    Réponses: 18
    Dernier message: 11/06/2007, 12h33
  3. Client SMTP : MIME, Boundary et Encodage
    Par leCcsympas dans le forum Développement
    Réponses: 2
    Dernier message: 04/12/2006, 23h56
  4. Client SMTP : MIME, Boundary et Encodage
    Par leCcsympas dans le forum C
    Réponses: 1
    Dernier message: 04/12/2006, 23h31
  5. erreur Client UDP
    Par innosang dans le forum Réseau
    Réponses: 6
    Dernier message: 04/01/2006, 10h33

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