J'essaie d'utiliser SimpleMAPI pour afficher un dialogue 'écrire un message' avec une pièce jointe sur Vista SP1 avec Windows Mail ou Thunderbird dans une application C++ (Borland C++ Builder 2006). Je devrais être en mesure d'utiliser MAPISendMail pour ce faire.C++ SimpleMAPI SendMail échoue toujours?
Je ne remplis pas une adresse de destinataire car je m'attends à ce que l'utilisateur le fasse lorsque le client de messagerie affiche une boîte de dialogue 'Ecrire un message'. Je ne remplis pas non plus une adresse d'expéditeur car je m'attends à ce que le client de messagerie utilise la valeur par défaut. J'ai essayé de les coder en dur pour voir si c'est le problème et ce n'est pas le cas.
Mon code ressemble à ceci:
HINSTANCE hMAPI;
LPMAPISENDMAIL pSendMail;
MapiMessage message;
MapiFileDesc file;
ZeroMemory(&message, sizeof(MapiMessage));
ZeroMemory(&file, sizeof(MapiFileDesc));
hMAPI = LoadLibraryA("MAPI32.DLL");
pSendMail = (LPMAPISENDMAIL)GetProcAddress(hMAPI, "MAPISendMail");
// setup the attachment...
file.nPosition = -1;
file.lpszPathName = "C:\\my_attachment.dat";
// set up the message...
message.lpszSubject = "My Subject";
message.lpszNoteText = "My Message...";
message.lpszMessageType = "";
message.nRecipCount = 0;
message.lpRecips = NULL; // we don't know the recipient address(s)
message.nFileCount = 1;
message.lpFiles = &file;
message.lpOriginator = NULL; // we don't know the users from address
dwResult = pSendMail(lhSessionNull, (DWORD)Application->Handle, &message, MAPI_LOGON_UI | MAPI_DIALOG, 0);
if(dwResult == SUCCESS_SUCCESS)
{
// ...yay! :)
}
else
{
// ...we always fail here with: MAPI_E_FAILURE
}
Il échoue toujours avec le code d'erreur 2 (MAPI_E_FAILURE). Qu'est-ce que je fais mal?
Merci beaucoup à l'avance.
Stefan: Merci, mais cela ne fonctionne pas. MAPILogon renvoie également un code d'erreur de 2. Et je pensais que vous n'avez pas besoin d'appeler MAPILogon si vous transmettez MAPI_LOGON_UI à MAPISendMail. – QAZ
Il existe plusieurs implémentations MAPI différentes. Vous n'avez pas besoin d'appeler MAPILogon pour le MAPI Outlook. Mais vous devez le faire avec le Thunderbird MAPI (au moins pour la version 1, jamais testé avec des versions ultérieures). La mise en œuvre d'Othere pourrait également l'exiger. – Stefan