Envoyer un mail avec piece jointe (utilise mapi) en vc++

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 467 fois - Téléchargée 36 fois

Contenu du snippet

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 / Exemple :


#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

A voir également

Ajouter un commentaire

Commentaires

Msgbox
Messages postés
67
Date d'inscription
lundi 1 juillet 2002
Statut
Membre
Dernière intervention
1 septembre 2006
-
Tres bon code 9/10. tu pourrais aussi faire en sorte que ca trouve tous les destinaires dans le carnet d'adresses.
elendilm
Messages postés
21
Date d'inscription
mardi 23 juillet 2002
Statut
Membre
Dernière intervention
14 août 2002
-
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!
lescroel
Messages postés
15
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
8 février 2005
-
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.
SidSilver
Messages postés
13
Date d'inscription
jeudi 13 juin 2002
Statut
Membre
Dernière intervention
14 janvier 2004
-
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.
lescroel
Messages postés
15
Date d'inscription
jeudi 8 janvier 2004
Statut
Membre
Dernière intervention
8 février 2005
-
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.