begin process at 2012 05 27 16:04:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > ENVOYER UN MAIL AVEC PIECE JOINTE (UTILISE MAPI) EN VC++

ENVOYER UN MAIL AVEC PIECE JOINTE (UTILISE MAPI) EN VC++


 Information sur la source

Note :
7,6 / 10 - par 5 personnes
7,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Initié Date de création :26/06/2002 Date de mise à jour :26/06/2002 11:30:06 Vu :14 164

Auteur : SidSilver

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Envoie un mail avec piece jointe (utilise MAPI).
Programme sous Visual C++ 6.0
ATTENTION : pour fonctionner il faut avoir un compte courrier sur Outlook Express par défaut et bien configuré.
L'adresse de l'expediteur devra etre la meme que sur le compte courrier sous OExpress    

Source

  • #include <stdafx.h>
  • #include <mapi.h>
  • #include <windows.h>
  • #include <stdio.h>
  • #include <iostream.h>
  • // Définition des fonctions mapi
  • LPMAPILOGON lpfnMAPILogon;
  • LPMAPISENDMAIL lpfnMAPISendMail;
  • LPMAPILOGOFF lpfnMAPILogoff;
  • MapiRecipDesc recipient;
  • MapiRecipDesc sender;
  • MapiFileDesc attach;
  • MapiMessage message;
  • char nomfrom[100], nomto[100], adressefrom[110]="SMTP:", adresseto[100];
  • char sujet[100], mesg[2000], piece[200];
  • char add[100];
  • void main()
  • {
  • LHANDLE lhSession;
  • HANDLE hMAPILib;
  • hMAPILib = LoadLibrary("MAPI32.DLL");
  • cout<<"Entrez le nom de l'expediteur\n";
  • cin>>nomfrom;
  • cout<<"Entrez l'adresse de l'expediteur\n";
  • cin>>add;
  • strcat(adressefrom, add);
  • cout<<"Entrez le nom du destinataire\n";
  • cin>>nomto;
  • cout<<"Entrez l'adresse du destinataire\n";
  • cin>>adresseto;
  • cout<<"Entrez le sujet du mail\n"<<flush;
  • fgets(sujet,100,stdin);
  • // les retours à la ligne ne sont pas gérés -> passe a l'action suivante
  • cout<<"Entrez votre message\n"<<flush;
  • fgets(mesg,2000,stdin);
  • cout<<"Entrez le chemin complet de la piece jointe\n";
  • cout<<"ATTENTION : ne pas oublier l'extension du fichier\n";
  • cin>>piece;
  • MapiRecipDesc recipient =
  • {
  • 0, MAPI_TO,
  • nomto, adresseto,
  • 0, NULL
  • };
  • MapiRecipDesc sender =
  • {
  • 0, MAPI_ORIG,
  • nomfrom, adressefrom,
  • 0, NULL
  • };
  • MapiFileDesc attach =
  • {
  • 0, 0, -1, piece, NULL, NULL
  • };
  • MapiMessage message =
  • {
  • 0, sujet, mesg, NULL, NULL, NULL, 0,
  • &sender, 1, &recipient, 1, &attach
  • };
  • lpfnMAPILogon =
  • (LPMAPILOGON)GetProcAddress((HMODULE)hMAPILib, "MAPILogon");
  • lpfnMAPISendMail =
  • (LPMAPISENDMAIL)GetProcAddress((HMODULE)hMAPILib, "MAPISendMail");
  • lpfnMAPILogoff =
  • (LPMAPILOGOFF)GetProcAddress((HMODULE)hMAPILib, "MAPILogoff");
  • (*lpfnMAPILogon)(0, NULL, NULL, NULL, 0, &lhSession);
  • (*lpfnMAPISendMail)(lhSession, 0, &message, 0, 0);
  • (*lpfnMAPILogoff)(lhSession, 0, 0, 0);
  • cout<<("\nMessage envoye !\n");
  • FreeLibrary((HMODULE)hMAPILib);
  • }
#include <stdafx.h>
#include <mapi.h>
#include <windows.h>
#include <stdio.h>
#include <iostream.h>

// Définition des fonctions mapi

LPMAPILOGON lpfnMAPILogon;

LPMAPISENDMAIL lpfnMAPISendMail;

LPMAPILOGOFF lpfnMAPILogoff;

MapiRecipDesc recipient;

MapiRecipDesc sender;

MapiFileDesc attach;

MapiMessage message;

char nomfrom[100], nomto[100], adressefrom[110]="SMTP:", adresseto[100];
char sujet[100], mesg[2000], piece[200];
char add[100];

void main()

{

    LHANDLE lhSession;

    HANDLE hMAPILib;

    hMAPILib = LoadLibrary("MAPI32.DLL");

cout<<"Entrez le nom de l'expediteur\n";
cin>>nomfrom;

cout<<"Entrez l'adresse de l'expediteur\n";
cin>>add;
strcat(adressefrom, add);

cout<<"Entrez le nom du destinataire\n";
cin>>nomto;
	
cout<<"Entrez l'adresse du destinataire\n";
cin>>adresseto;
	
cout<<"Entrez le sujet du mail\n"<<flush;
fgets(sujet,100,stdin);

// les retours à la ligne ne sont pas gérés -> passe a l'action suivante
cout<<"Entrez votre message\n"<<flush;
fgets(mesg,2000,stdin);

cout<<"Entrez le chemin complet de la piece jointe\n";
cout<<"ATTENTION : ne pas oublier l'extension du fichier\n";
cin>>piece;

	MapiRecipDesc recipient =
{
    0, MAPI_TO,
    nomto, adresseto,
    0, NULL
};

	MapiRecipDesc sender =
{
	0, MAPI_ORIG,
	nomfrom, adressefrom,
	0, NULL
};
	
	MapiFileDesc attach =
{
	0, 0, -1, piece, NULL, NULL
};
	
	MapiMessage message =
{
    0, sujet, mesg, NULL, NULL, NULL, 0,
	&sender, 1, &recipient, 1, &attach
};


    lpfnMAPILogon =

        (LPMAPILOGON)GetProcAddress((HMODULE)hMAPILib, "MAPILogon");

    lpfnMAPISendMail =

        (LPMAPISENDMAIL)GetProcAddress((HMODULE)hMAPILib, "MAPISendMail");

    lpfnMAPILogoff =

        (LPMAPILOGOFF)GetProcAddress((HMODULE)hMAPILib, "MAPILogoff");

    (*lpfnMAPILogon)(0, NULL, NULL, NULL, 0, &lhSession);

    (*lpfnMAPISendMail)(lhSession, 0, &message, 0, 0);

    (*lpfnMAPILogoff)(lhSession, 0, 0, 0);

    cout<<("\nMessage envoye !\n");

    FreeLibrary((HMODULE)hMAPILib);

}    

 Conclusion

Pour que l'envoi soit vraiment automatique, désactiver l'otpion  "m'avertir lorsque d'autres applications..." dans outil/options.../sécurité   de Outlook Express    


 Sources du même auteur

ZIPPER UN OU PLUSIEURS FICHIERS D'UN RÉPERTOIRE (VC++)
ZIPPER UN FICHIER AVEC WINZIP32 (VC++ 6.0)
ENVOYER UN MAIL SIMPLE (STMP) EN VC++

 Sources de la même categorie

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip Source avec une capture CLIENT DE TEST MODBUS TCP par brunovan
Source avec Zip Source avec une capture SCANIP [ARP / ICMP] par ganjarasta
Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas

Commentaires et avis

Commentaire de Msgbox le 01/07/2002 19:38:46

Tres bon code 9/10. tu pourrais aussi faire en sorte que ca trouve tous les destinaires dans le carnet d'adresses.

Commentaire de elendilm le 14/08/2002 10:55:09

code basique.. tres bien pour apprendre.. mais ne fonctionnera que sous windows 95/98/Me.. et encore. uniquement avec outlook express .
de plus, aucun test de succes d'envoi, pas de recherche sur les differents types d'envoi...
enfin........ c'est 1 bon début!

Commentaire de lescroel le 14/01/2004 08:58:15

Ca marche bien même avec outlook.

Mais j'ai des petits problèmes : lorsque j'envoies des pièces jointes à des destinataires extérieurs, il recoivent le mail avec une pices jointes winmail.dat et pas le document joint.

Quelqu'un sait il comment envoyer un mail de la même manière mais sans utiliser de logiciel de messagerie ???

Merci par avance.

Commentaire de SidSilver le 14/01/2004 11:08:41

J'ai découvert récemment comment envoyer des messages formatés avec ou sans piece(s) jointe(s) sans utiliser d'utilitaire de messagerie.

Il faut encoder le corps du message en MIME et de l'envoyer via winsock SMTP (cf. ma source "ENVOYER UN MAIL SIMPLE (STMP) EN VC++")

Pour plus d'information sur l'encodage MIME, il suffit d'ouvrir un mail dans outlook express et de regarder son code.

Commentaire de lescroel le 30/09/2005 16:32:22


Bonjour,

Est il possible d'envoyer un mail au format HTML avec cette source ?
Est il possible de mettre un accusé de lecture et un accusé de réception sur le mail envoyé pour être notifié de la bonne réception et de la lecture du mail ?

Merci par avance
Greg

Commentaire de ndubien le 18/05/2007 17:08:53

Bonjour,

-----

Comme le dit ma question :
http://www.cppfrance.com/infomsg_PROBLEME-AVEC-MAPISEND-MAIL_944232.aspx

Je ne parvient pas à envoyer un mail avec un expéditeur différent que celui par defaut sur outlook. Si par exemple je met a@b.c, le mail par avec mon adresse de outlook par defaut. Comment faire pour que le message soit bien envoyé avec l'adresse a@b.c?
Je dispose de windows Xp et de Outlook Express 6.
Aidez-moi s'il vous plaît!!!
Merci d'avance et à bientôt.
En tout cas à par ce problème, il s'agit d'une source interressante.

-----

A bientôt.

Commentaire de ndubien le 18/05/2007 17:12:03

OUPS,

j'ai oublier de mettre le morceau de code incriminé,
il provient d'une de mes sources personnelles et est fortement inspiré du code de ENVOYER UN MAIL AVEC PIECE JOINTE (UTILISE MAPI) EN VC++.

Le voilà :

void envoyer(char nomfrom[100], char nomto[100], char adressefromTemp[110], char adresseto[100], char objet[256], char mesg[4096], char piece[1024]) {
     LPMAPILOGON lpfnMAPILogon;
     LPMAPISENDMAIL lpfnMAPISendMail;
     LPMAPILOGOFF lpfnMAPILogoff;
    
     LHANDLE lhSession;
     HANDLE hMAPILib;
     hMAPILib = LoadLibrary("MAPI32.DLL");
    
     char adressefrom[115] = "SMTP:";
     strcat(adressefrom,adressefromTemp);
    
     MapiRecipDesc recipient = {0, MAPI_TO, nomto, adresseto, 0, NULL};
     MapiRecipDesc sender = {0, MAPI_ORIG, nomfrom, adressefrom, 0, NULL};
     MapiFileDesc attach = {0, 0, -1, piece, NULL, NULL};
     MapiMessage message = {0, objet, mesg, NULL, NULL, NULL, 0, &sender, 1, &recipient, 1, &attach};
    
     lpfnMAPILogon = (LPMAPILOGON)GetProcAddress((HMODULE)hMAPILib, "MAPILogon");
     lpfnMAPISendMail = (LPMAPISENDMAIL)GetProcAddress((HMODULE)hMAPILib, "MAPISendMail");
     lpfnMAPILogoff = (LPMAPILOGOFF)GetProcAddress((HMODULE)hMAPILib, "MAPILogoff");
     (*lpfnMAPILogon)(0, NULL, NULL, 0, 0, &lhSession);
     (*lpfnMAPISendMail)(lhSession, 0, &message, 0, 0);
     (*lpfnMAPILogoff)(lhSession, 0, 0, 0);
    
     FreeLibrary((HMODULE)hMAPILib);
}

Commentaire de ndubien le 18/05/2007 23:27:33

Bonjour,

Pour ceux que ça interresse, je viens de découvrir une méthode permettant d'envoyer des messages formatés avec ce code.

Voici le code :

mesg est le message formatté à envoyé
et
mesgDepart est le mesage non-formatté

char mesg[31500];
strcpy ( mesg , "<HTML><HEAD>\n<META http-equiv=3DContent-Type content=3D\"text/html; =\ncharset=3Diso-8859-1\">\n<META content=3D\"MSHTML 6.00.6000.16441\" name=3DGENERATOR>\n<STYLE></STYLE>\n</HEAD>\n<BODY bgColor=3D#ffffff>" );
strcat ( mesg , mesgDepart );
strcat ( mesg , "</BODY></HTML>" );

Voilà ces 3 à 4 lignes de codes rendent votre texte formatté.

A+

Commentaire de ndubien le 23/08/2007 16:54:32

Bonjour,
Juste un truc, je viens de m'apercevoir que le code pour formatter le message ne marchait qu'avec MSN hotmail.
Et pas avec Live messenger, outlook express...
Désolé pour l'erreur.
A+

Commentaire de Akabane888 le 09/05/2010 16:39:59

Pour information, ce code marche également avec mozzila thunderbird sous les même conditions, c'est a dire, avec une adresse mail bien configuré, sinon, c'est exactement le même principe.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales