转贴于 华夏黑客同盟 http://www.77169.org [问题] 如何在MFC应用程序中使用MAPI32.DLL发送电子邮件。 [解答] /*加上头文件*/ #include <mapi.h> #include <stdlib.h> /* 定义SendEmail函数的返回值*/ #define SENDEMAIL_SUCCESS 0 //邮件成功发送 #define SENDEMAIL_MAPI_NOT_INSTALLED 1 //没有安装MAPI Server #define SENDEMAIL_MAPILOAD_FAILED 2 //加载 MAPI32.DLL 失败 #define SENDEMAIL_LOGON_FAILED 3 //无法登陆到 MAPI Server 或者 用户取消了登陆框 #define SENDEMAIL_SEND_FAILED 4 //消息发送失败 int SendEmail(const char* Address, const char* Subject, const char* Text) { int iResult; UINT iMapiInstalled; HINSTANCE hMAPIInst; LPMAPILOGON pMAPILogon; LPMAPILOGOFF pMAPILogoff; LPMAPISENDMAIL pMAPISendMail; LHANDLE lhSession; iResult = SENDEMAIL_SUCCESS; iMapiInstalled = GetProfileInt("Mail", "MAPI", 0); if(! iMapiInstalled) return SENDEMAIL_MAPI_NOT_INSTALLED; hMAPIInst = LoadLibrary("MAPI32.DLL"); if(!hMAPIInst) return SENDEMAIL_MAPILOAD_FAILED; pMAPILogon = (LPMAPILOGON) GetProcAddress(hMAPIInst, "MAPILogon"); pMAPILogoff = (LPMAPILOGOFF) GetProcAddress(hMAPIInst, "MAPILogoff"); pMAPISendMail = (LPMAPISENDMAIL) GetProcAddress(hMAPIInst, "MAPISendMail"); if(pMAPILogon(0, NULL, NULL, MAPI_LOGON_UI, 0, &lhSession) != SUCCESS_SUCCESS) { iResult = SENDEMAIL_LOGON_FAILED; } else /* Send the Message */ { ULONG Result; MapiMessage Msg; MapiRecipDesc Recipients[1]; Recipients[0].ulReserved = 0; Recipients[0].ulRecipClass = MAPI_TO; Recipients[0].lpszName = (char*)Address; Recipients[0].lpszAddress = (char*)Address; Recipients[0].ulEIDSize = 0; Recipients[0].lpEntryID = 0; memset(&Msg, 0, sizeof(Msg)); Msg.lpszSubject = (char*)Subject; Msg.lpszNoteText = (char*)Text; Msg.nRecipCount = 1; Msg.lpRecips = Recipients; Result = pMAPISendMail(lhSession, 0, &Msg, 0, 0); if(Result != SUCCESS_SUCCESS) iResult = SENDEMAIL_SEND_FAILED; pMAPILogoff(lhSession, 0, 0, 0); } FreeLibrary(hMAPIInst); return iResult; } 调用方法: rc = SendEmail("SMTP:hangwire@sina.com", "一个小测试","你好,/n其实这很简单。"); |