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

 C Discussion :

Problème serveur SMTP


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut Problème serveur SMTP
    Bonjour,

    J'ai trouvé le code ci dessous qui est censé envoyer un e-mail en C, le truc c'est que je ne sais pas trop ce qu'est un serveur smtp et du coup je ne peux pas tester ce code pour l'étudier.
    Ma question est donc : comment je fais pour savoir quel serveur utiliser avec quelle adresse mail et les différents paramètre que je doit connaitre ?

    Merci

    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
    #include <stdio.h>	// pour puts()
    #include <string.h>	// pour bzero() bcopy() strlen()
     
    //includes réseau
    #include <unistd.h>	// pour close()
    #include <netdb.h>	// pour gethostbyname()
    #include <arpa/inet.h>  // pour sockaddr_in
     
    int sk = -1;		//le descripteur du socket
     
    char serveur[] = "smtp.wanadoo.fr";
     
    char lemail[] = "HELO wanadoo.fr\r\n"
    		"MAIL FROM: <blabla@orange.fr>\n"
    		"RCPT TO: <truc@truc.fr>\n"
    		"DATA\r\n"
    		"Subject: le mur et les oreilles\r\n"
     		"FROM: François <blabla@orange.fr>\r\n"
    		"TO: Segolene <truc@unautre.fr>\r\n"
    		"Bijour\r\n"
    		"petit message\r\n"
    		".\r\n"
    		"QUIT\r\n\r\n";
     
    //Déclaration des Prototypes de fonctions
    unsigned short init_socket();
    void recevoir_reponse();
     
    int main (int argc, char *argv[])
    {
     
    	if (init_socket())
    	{
    	send(sk, lemail, strlen(lemail)-1, 0);
    	recevoir_reponse(); //fermera le socket.
    	}
     
    	return 0;
    }
     
    unsigned short init_socket()
    {
    	struct sockaddr_in serveurSockAddr;	// addresse
    	struct hostent *serveurHostEnt;		// description host serveur
    	unsigned long hostAddr;			// addr du serveur
     
    	bzero(&serveurSockAddr,sizeof(serveurSockAddr));
    	hostAddr = inet_addr(serveur); // convertit l'adresse ip en entier long
     
    	if ( (long)hostAddr != (long)-1)
    		bcopy(&hostAddr,&serveurSockAddr.sin_addr,sizeof(hostAddr));
    	else  // on a donné un nom, pas une IP
    	{
     		serveurHostEnt = gethostbyname(serveur);
    		if (serveurHostEnt == NULL)
      		{
    			puts("probleme gethost");
    			return 0;
    		}
     		bcopy(serveurHostEnt->h_addr,&serveurSockAddr.sin_addr, serveurHostEnt->h_length);
    	}
     
    	serveurSockAddr.sin_port = htons(25); //port 25 pour SMTP
    	serveurSockAddr.sin_family = AF_INET;
     
    	if ( (sk = socket(AF_INET,SOCK_STREAM,0)) < 0)
    	{
    		puts("Impossible de creer le socket");
    		return 0;
     	}
     
    	if(connect(sk,(struct sockaddr *)&serveurSockAddr, sizeof(serveurSockAddr)) < 0)
    	{
    		puts("probleme sur connect()");
    		return 0;
    	}
    	else
    	{
    		printf("Connecté au serveur %s\n",serveur);
    		return 1;
    	}
    }
     
    void recevoir_reponse()
    {
    	puts("En attente de la reponse ...\n");
    	char  tempBuffer[1024];
    	int retval;
     
    	while(1)
    	{
    	    retval = recv(sk, tempBuffer, sizeof(tempBuffer)-1, 0);
    	    if (retval==0)
    	    { 
    			shutdown(sk,2); //ferme le socket
    			close(sk);
    			puts("Socket fermé.");
    	        break;
    	    }
    	    else if (retval == -1)
    	    {
    	        puts("Erreur pendant la reception");
    	    }
    	    else
    	    {
    	        tempBuffer[retval] = 0;
    	        puts(tempBuffer);
    	    }
    	}
    }

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Le SMTP, c'est la machine qui va transférer les mails depuis ton ordi jusqu'à celui du destinataire... en passant par d'autres SMTP si nécessaire.

    Avec le spam, les FAI classiques configurent les box "par défaut" pour interdire les communications vers d'autres SMTP que les leurs.
    Cela permet de connaitre l'origine des spams voire de les bloquer en faisant des règles internes.

    Si tu es chez Orange, et veut envoyer à quelqu'un chez Free, ça va en gros se passer ainsi :
    1) tu rédiges ton mail sur un MUA (outlook, thunderbird, ...), et l'envoies
    2) ton ordi va contacter le MTA Orange (en SMTP)
    3) Le MTA Orange va probablement te demander un login/pass pour émettre un mail, il va ensuite prendre ton mail et s'en occuper en le mettant dans sa file de traitement (spooler)
    4) Le MTA Orange va lire le destinataire et chercher à contacter le MTA Free (en SMTP), s'il y arrive, il lui donne ton mail
    5) Le MTA Free va prendr ele mail et le mettre dans sa file, puis il va se rendre compte que la boîte est locale à son domaine (Free), il va contacter le MDA Free et laisser le mail dans une boîte
    6) ton destinataire va contacter son MDA pour "récupérer" les mails (en POP3 ou IMAP)

    SMTP = envoi + transmission de MTA en MTA (c'est en gros quand tu va donner à La Poste et qu'elle gère en interne ta lettre)
    POP3 et IMAP = consultation d'une boîte au lettre (c'est en gros quand tu vas regarder ta boîte aux lettres "privée" de ton bâtiment où La Poste laisse ses messages)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Merci, c'est très intéressant et je comprend mieux le fonctionnement maintenant.

    Mais mon vrai problème est de trouver par quoi je dois remplacer smtp.wanadoo.fr si je veux par exemple envoyer un mail sur une adresse yahoo ou gmail

  4. #4
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Par défaut Salut,
    Je m'étais servi de ceci pour un ancien projet .

    Tu peux t'inspirer aussi de l'API au cas où tu voudrais reinventer la roue.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Je m'étais servi de ceci pour un ancien projet .
    Désolé mais je ne comprend pas trop en quoi ça peut m'aider.

  6. #6
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Le lien de fab est fabuleux ! (hohoho !)

    Bref : quel est ton FAI ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 4
    Par défaut
    Bref : quel est ton FAI ?
    Je suis chez FREE

Discussions similaires

  1. Problème de serveur SMTP
    Par stupido dans le forum AS/400
    Réponses: 2
    Dernier message: 03/09/2010, 23h34
  2. Problème d'envoie serveur smtp
    Par morgan47 dans le forum Administration système
    Réponses: 0
    Dernier message: 03/11/2009, 22h10
  3. Problème de connexion à un serveur SMTP MS Exchange
    Par GillesN dans le forum Réseau
    Réponses: 0
    Dernier message: 24/02/2009, 19h13
  4. problème evoie mail avec serveur smtp
    Par scofild20 dans le forum Développement
    Réponses: 7
    Dernier message: 29/11/2007, 20h33
  5. Problème de serveur SMTP
    Par wormseric dans le forum Internet
    Réponses: 3
    Dernier message: 09/01/2007, 12h40

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