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 :

envoi de mails


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 92
    Points : 45
    Points
    45
    Par défaut envoi de mails
    si quelqu'un a, ou connait, des références de site ou encore un code pour envoyer des mails en c avec le protocole smtp.
    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
    Sur un site, je lis:

    Il s'agit d'un protocole fonctionnant en mode connecté, encapsulé dans une trame TCP/IP.
    La trame TCP est géré par les sockets donc tu n'as rien à faire...

    Le protocole SMTP fonctionne grâce à des commandes textuelles envoyées au serveur SMTP (par défaut sur le port 25).
    Donc il faut envoyer le message au serveur SMTP sur le port 25

    Chacune des commandes envoyées par le client (validée par la chaîne de caractères ASCII CR/LF, équivalent à un appui sur la touche entrée) est suivi d'une réponse du serveur SMTP composée d'un numéro et d'un message descriptif.
    Donc le contenu DATA de la trame TCP n'est rien d'autre que la chaîne ascii qui contiendra la commande voulue (EHLO, MAIL FROM...) et ensuite le client attend la réponse du serveur qui est généralement:

    250 OK
    Un exemple de fonctionnement:
    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
     
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main(void)
    {
    char buf[256];
        /* Creation de la socket */
         int sock;
         struct sockaddr_in sin;
    char ip[16] =  "127.0.0.1";
    int res;
     
       sock = socket(AF_INET, SOCK_STREAM, 0);
     
        /* Définition des paramétres de la socket */
       sin.sin_addr.s_addr = inet_addr(ip); 
       sin.sin_family       = AF_INET;
       sin.sin_port       = htons(25);  //C'est du SMTP
     
        /* Ouverture de la connexion */
       if(connect(sock, (struct sockaddr *)&sin, sizeof(sin))!=-1)
       {
       printf("Connexion au serveur SMTP\n");
     
       /*Attente réponse de presentation du serveur*/
       if((res=recv(sock,buf,sizeof buf,0))==-1)
        {
        printf("Reception du message echoue\n");
        return EXIT_FAILURE;
        }
     
       /*On met le caractère NULL*/
       buf[res] = '\0';    
       /*Affichage*/
       printf("Message reçu: %s\n",buf);
     
       /*On envoie EHLO, en SMTP, il faut que la commande termine avec un '\n'*/
       strcpy(buf,"EHLO\n");
       if(send(sock,buf,strlen(buf),0)==-1) 
         {
        perror("Send EHLO echoue\n");
         return EXIT_FAILURE;
         }
     
       /*Attente réponse du serveur*/
       if((res=recv(sock,buf,sizeof buf,0))==-1)
        {
        printf("Reception du message echoue\n");
        return EXIT_FAILURE;
        }
     
       /*On met le caractère NULL*/
       buf[res] = '\0';    
     
       /*Affichage*/
       printf("Message reçu: %s\n",buf);
     
       /*Envoi de quit*/
       strcpy(buf,"QUIT\n");
       if(send(sock,buf,strlen(buf),0)==-1)
         {
         perror("Send QUIT echoue\n");
         return EXIT_FAILURE;
         }
       }
       else
       {
        printf("Connexion échouée\n");
       }
     
     
    return EXIT_SUCCESS;
    }
    Jc

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 92
    Points : 45
    Points
    45
    Par défaut
    merci pour le code.
    en fait je me demandai s'il était possible d'exécuter une commande "system" pour un envoi de mails.

  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
    en fait je me demandai s'il était possible d'exécuter une commande "system" pour un envoi de mails.
    Pas portable à mon avis. Je sais que si tu as linux, tu peux tenter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mail whoever@whatever.com < mail.txt
    Avec le mail que tu veux envoyer dans le fichier. Par contre, je ne sais plus s'il est possible ou non de spécifier un sujet par exemple...

    Mais pas sous windows du moins je ne pense pas...

    D'où le "pas portable à mon avis",

    Jc

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 92
    Points : 45
    Points
    45
    Par défaut
    ok merci; effectivement je suis sous linux
    pour ceux que ca interesse on peut spécifier le sujet avec le "-s".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mail -s "premier mail" machin@truc.fr
    une fois que vous avez cliquer sur "entré" vous rentrez le corps du mail, à notez que vous pouvez passer à la ligne en appuyant sur sur "entré".
    Pour valider vous appuyer sur la touche "controle" (ctrl) et sur "d".
    La on vous demande si vous voulez faire un copie, vous rentrez une adresse et (ou) vous appuyez sur "entré".

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

Discussions similaires

  1. Envoi de mail au format html
    Par Mephyston dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/01/2004, 12h29
  2. Envoi de mail au format Rich-Text
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 29/10/2003, 16h27
  3. envoi de mail avec attachement de fichier
    Par GMI3 dans le forum Modules
    Réponses: 2
    Dernier message: 24/09/2003, 11h22
  4. Outlook ne se ferme pas après un envoi de mail
    Par Joke dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2003, 17h32
  5. envoi de mail, protocol SMTP langage C
    Par Heimdall dans le forum Développement
    Réponses: 2
    Dernier message: 23/05/2003, 11h22

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