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 :

Test de mail en C


Sujet :

Réseau C

  1. #1
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut Test de mail en C
    Bonjour,
    je voudrais envoyer des mèls en utilisant l'application sendmail d'une machine (HP-UX B.11.11 U 9000/785) a laquelle j'ai accès au boulot avec un compte.
    Il se trouve que quand j'envoie le mail depuis telnet sur le smtp de ma boite, cela se passe bien :
    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
    $ telnet aaa.bbb.ccc.ddd 25
    Trying...
    Connected to aaa.bbb.ccc.ddd.
    Escape character is '^]'.
    220 mailscanner.ma_boite.net ESMTP Sendmail 8.14.3/8.14.3; Fri, 17 Sep 2010 08:21:30 +0200
    EHLO ma_boite.net
    250-mailscanner.ma_boite.net Hello reverse.completel.net [213.244.31.210] (may be forged), pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-AUTH DIGEST-MD5 CRAM-MD5
    250-DELIVERBY
    250 HELP
    MAIL FROM: <moi@ma_boite.net>
    250 2.1.0 <moi@ma_boite.net>... Sender ok
    RCPT TO: <moi@ma_boite.net>
    250 2.1.5 <moi@ma_boite.net>... Recipient ok
    RCPT TO: <moi@numericable.fr>
    250 2.1.5 <moi@numericable.fr>... Recipient ok
    DATA
    354 Enter mail, end with "." on a line by itself
    Subject: test message
    blah,
    blah, blah,
    blah, blah, blah.
    .
    250 2.0.0 o8H6LUii025786 Message accepted for delivery
    QUIT
    221 2.0.0 mailscanner.ma_boite.net closing connection
    Connection closed by foreign host.
    $
    Je suis cemendant obligÅ de dÅsigner le smtp/mailscanner de ma boite par son IP, sinon, quand je le designe par son nom, ma machine me rÅpond :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ telnet smtp.ma_boite.net
    smtp.ma_boite.net: Unknown host
    $ telnet mailscanner.ma_boite.net
    mailscanner.ma_boite.net: Unknown host
    Ceci me laisse subodorer qu'il y a un probleme de rÅsolution de noms.

    Et j'ai obtenu cette IP en utilisant le DNS de mon propre FAI, a savoir numericable, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ $ nslookup - 89.2.0.1
    ------------
    Specifying a nameserver has overridden the switch policy order.
    The reset command will reinstate the order specified by the switch policy.
    Default Name Server:  ns1.numericable.net
    Address:  89.2.0.1
     
    > smtp.ma_boite.net
    ------------
    Non-authoritative answer:
    Name:    smtp.ma_boite.net
    Address:  aaa.bbb.ccc.ddd

    Ci dessous se trouve la retranscription des échanges entre cette
    application et un programme en C que j'ai fait sur le modèle trouve ici,
    <http://broux.developpez.com/articles/protocoles/smtp/>
    http://broux.developpez.com/articles/protocoles/smtp/ .
    Voici ce qui se passe si j'essaye d'utiliser ce programme en C :
    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
    $ ./mail mail.txt
     
    ret=sethostent = 0
    ret=gethostname = 0 ; hostname : ishp170
     
    hostinfo->h_name="ishp170" (0)
    hostinfo->h_aliases="" (1)
    hostinfo->h_addrtype=2 (2)
    hostinfo->h_length=4 (3)
    inet_ntoa((in_addr)hostinfo->s_addr)    hostname : (4)
    192.168.11.20                           ishp170
    hostinfo->h_addr=1073769292 (5)
    hostinfo->h_name="ishp170" (7)
    sin.sin_addr="c0a80b14"
    sip2="192.168.11.20"
    la connexion semble Ok (8)
    read response(11):
    220 ishp170 ESMTP Sendmail 8.9.3 (PHNE_29774)/8.9.3; Fri, 17 Sep 2010 08:21:47 +0100 (WETDST)
     
    send HELP
    command:
    HELP
    write_server: buffer:
    HELP
    read response(12):
    214-This is Sendmail version 8.9.3 (PHNE_29774)
    filename=mail.txt (11.5)
     
    send EHLO
    buffer lu = "ma_boite.net". (12)
    command:
    EHLO ma_boite.net
    write_server: buffer:
    EHLO ma_boite.net
    read response(13):
    250-ishp170 Hello dael@ishp170 [192.168.11.20], pleased to meet you
     
    send VERB
    command:
    VERB
    write_server: buffer:
    VERB
    read response(14):
    250 Verbose mode
     
    send MAIL FROM
    command:
    MAIL FROM: <moi@ma_boite.net>
    write_server: buffer:
    MAIL FROM: <moi@ma_boite.net>
    read response(15):
    051 ma_boite.net: Name server timeout
    Ceci corrobore, a mon avis, le fait que ma machine ne soit pas bien "accrochee" a l'internet; en effet je suis obligÅ d'utiliser le DNS de mon propre FAI pour faire un lookup de l'adresse IP du smtp de ma boite.
    Il est a noter de plus que le fichier nsswitch.conf n'existe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ more /etc/nsswitch.conf
    /etc/nsswitch.conf: No such file or directory
    Est il possible de specifier au smtp un DNS a utiliser pour rÅsoudre les adresses des destinataires du mail ?
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu es en train d'essayer d'envoyer un mail de l'intérieur vers l'extérieur en passant par le serveur SMTP sensé faire passer les mails de l'extérieur vers l'intérieur. Il y a fort à parier que ta boite a un autre serveur SMTP pour relayer les mail en provenance du réseau interne.

    Bref renseigne toi, mais je ne pense pas que tu soi sensé envoyer des mail à ce serveur SMTP là.

  3. #3
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    j'arrive tout-a-fait correctement a envoyer le mail en utilisant telnet sur le serveur smtp de ma boite, donc il n'est pas raisonnable de supposer que le programme en C n'ait pas le droit de faire exactement la meme chose.
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Je répondais simplement sur le fait que le DNS de ta boite ne connait pas le serveur SMTP que tu utilises.

    Pour le reste je doute que tu fasse exactement la même chose dans les deux cas, puisqu'avec le telnet tu es 213.244.31.210 (donc réseau externe à priori), et avec le programme en C tu es 192.168.11.20 (donc réseau interne). Ce qui colle bien avec mon hypothèse que tu n'utilises pas le bon serveur SMTP : tu utilises le serveur SMTP externe de ta boite, qui n'utilise pas le DNS interne de ta boite, et qui ne sais donc pas résoudre les nom internes.

  5. #5
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Oui Ok pour ton histoire d'adresses IP qui sont différentes; je regarderai ça lundi si je n'ai pas trop de taf; en tout cas merci d'avoir remarqué cela et bon week end.
    David
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  6. #6
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    J'ai un essaye d'avancer peu sur mon histoire de SMTP, mais ça ne va pas bien; en effet, il me semble impossible de se connecter depuis mon programme en C sur le SMTP dont tu as remarque que l'adresse était différente de celle de la machine locale sur laquelle je bosse.
    L'appel gethostname me retourne un pointeur vers une structure hostent qui concerne la machine locale sur laquelle je bosse, ce qui est normal, mais les fonctions gethostbyaddr(IP_SMTP) et gethostbyname(SMTP_name) me renvoient sans erreur un pointeur NULL bien que je leur fournisse le nom du SMTP ou son adresse IP.
    Pourtant ce ne semble pas être un problème de droits que je n'aurais pas pour faire ces appels, puisque le "telnet IP_SMTP 25" marche bien et que les deux appels en question se déroulent correctement sans renvoyer d'erreur.
    Donc j'envisage de truandificationner la structure hostent que j'utilise pour me connecter; je voudrais qu'elle contienne comme membre *h_name, le premier, quelque chose qui pointerait vers le nom du serveur SMTP, et un cinquième membre **h_addr_list dont le premier terme h_addr_list[0] serait l'adresse IP extérieure de cette machine.
    Pour cela, je pars de la structure hostent qui concerne ma machine, celle vers laquelle gethostname me retourne un pointeur, et je voudrais en modifier les membres en question de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    infotmp = gethostname(hostname); /* appel pour récupérer une struct
    hostinfo tmp */
    strcpy(smtpname, "smtp.ma_boite");
    infotmp->h_name=smtpname;
    strcpy(ip_smtp, "aaa.bbb.ccc.ddd");
    infotmp->h_addr_list[0]=ip_smtp;
    Apparemment ce n'est pas encore tout a fait satisfaisant puisque tous ces membres de la structure infotmp sont des zéros, ce qui ne me surprend pas du tout puisque je connais assez peu le langage C; alors pourrais tu m'aider a modifier cette structure ?
    J'ai par ailleurs essaye de l'inspecter un peu, en commencent par un sizeof(infotmp), et ça me retourne une taille de "4", ce qui a l'air d'être quatre mots de quatre octets puisque une petite boucle me donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    &infotmp=680F2250
    sizeof(infotmp)=4
    i=0, addr=680F2250, p=0
    i=1, addr=680F2254, p=0
    i=2, addr=680F2258, p=0
    i=3, addr=680F225C, p=0
    Mais j'ai pour chaque membre "p=o" parce que je ne sais même pas quel autre sortie demander au printf que le "%X" que j'ai mis.
    Je suppose que ce que j'ai écrit ci dessus est truffé d'erreurs alors j'aimerais bien que tu les corriges un peu, ça m'aiderait a avancer d'un petit pas.
    Merci,
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

  7. #7
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Bon, hebin je suis une bille complete, parce que il m'a suffi de reprendre l'original exact qui est sur le site, et de le convertir legeÜrement pour le compilateur de la HP qui n'est pas ANSI, et tout va bien. Donc resolu...
    P.S. Dis Toto, pourquoi l'univers existe-t'il ?
    Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se causer avant.

Discussions similaires

  1. test du mail dans un formulaire
    Par riderfun dans le forum Langage
    Réponses: 1
    Dernier message: 21/07/2008, 11h40
  2. [Mail] Construire un test avec une variable
    Par jeromesco dans le forum Langage
    Réponses: 3
    Dernier message: 17/02/2006, 21h52
  3. [Mail] Envoi d'un mail de test
    Par tonton54 dans le forum Langage
    Réponses: 12
    Dernier message: 22/10/2005, 15h31

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