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 :

envoie de mail en c++ sous linux (serveur smtp)


Sujet :

C++

  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 de mail en c++ sous linux (serveur smtp)
    Bonjour a tous.

    Je suis entrain de développer une application c++ sous linux (OpenSuse 10.3). le résultat de cette application est un mail contenant une pièce jointe. Je dois donc utiliser le serveur smtp et les sockets.

    Pouvez vous me guider sur la manière de développement d'une telle application.

    J'attends une réponse de vous .

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par modafine Voir le message
    Bonjour a tous.

    Je suis entrain de développer une application c++ sous linux (OpenSuse 10.3). le résultat de cette application est un mail contenant une pièce jointe. Je dois donc utiliser le serveur smtp et les sockets.

    Pouvez vous me guider sur la manière de développement d'une telle application.

    J'attends une réponse de vous .

    Merci d'avance.
    Le plus simple est d'utiliser une librairie qui implémente l'envoi de mail via le protocole SMTP. Le nombre de librairie de ce type est pléthorique (notamment sur sourceforge), donc tu ne devrais pas avoir trop de problèmes à trouver.

  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
    Bonjour

    j'ai essayé le code suivant: (il n'est pas le mien)

    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
     
    // gcc -Wall -o mail mail.c
     
    #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);
    	    }
    	}
    }
    mais je reçoi toujour le message suivant "problème sur connect()"

    je crois que je dois configurer le serveur smtp.

    Si quelqu'un peut m'aider je serais bien reconnaisante. Je rappelle que je travaille sous linux opensuse 10.3.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    T'aurais plus de chances de trouver quelqu'un qui s'y connait en serveur smtp sur linux dans le forum linux.

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    L'OS n'a pas grand chose à voir là dedans... fort heureusement...

    1. Sous linux, on prefere utiliser le sendmail local (localhost:25) qui doit être configuré pour dispatcher (relayer éventuellement au provider) correctement le mail.

    2. Il me semble bizarre que tu ne passes pas le protocol dans la création du socket: genre PROTO_TCP ...

    3. Lors d'une connection SMTP, il faut aussi s'assurer des réponses du serveur:

    -> EHLO moi.monprovider.com
    <- 220 HELO moi.monprovider.com
    -> MAIL FROM: blabla@orange.fr
    <- 250 ... Sender ok
    -> RCPT TO: truc@truc.fr
    <- 250 ... Recipient ok
    -> DATA
    <- 354 ... enter mail data end with "."
    -> .... all mailing data ...
    -> '.'
    <- 250 ok for delivery
    -> QUIT
    <- 221 xxxx closing connection

  6. #6
    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
    bonjour nicroman,

    merci pour ta réponse.
    Peux tu me guider sur la manière de configuration du serveur smtp.

    Et peux tu m'aider sur un code de programmation de l'envoie en c++

    Merci d'avance.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Il se peut aussi que tu soit sur un réseau sur lequel le port 25 sortant est bloqué.

    Par exemple, si ton FAI est Free, il se peut que Free bloque le port 25 sortant du réseau Free sauf à destination de smtp.free.fr.
    Ceci est fait pour lutter contre la propagation de spam, virus et autres bricoles.
    Si tu es sur un réseau d'entreprise, tu peux avoir le même problème aussi, il faut utiliser le mail relay de ton entreprise.

Discussions similaires

  1. envoi du mail par crontab sous linux
    Par jamel_dhahri dans le forum Administration système
    Réponses: 1
    Dernier message: 19/06/2015, 16h05
  2. Réponses: 1
    Dernier message: 16/05/2008, 08h23
  3. Pb d'envoi de mails après migration AD et serveur Exchange 2003
    Par hélios44 dans le forum Exchange Server
    Réponses: 3
    Dernier message: 22/04/2008, 18h49
  4. [PB CONTOURNE !]Envoi de mail avec mutt sous forms
    Par nono592303 dans le forum Forms
    Réponses: 5
    Dernier message: 18/01/2008, 17h21
  5. Problème d'envoie de mail avec PHP sur le serveur Linux
    Par Nessma dans le forum Administration système
    Réponses: 0
    Dernier message: 03/09/2007, 16h06

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