mail.cxx
来自「pwlib源码库」· CXX 代码 · 共 918 行 · 第 1/2 页
CXX
918 行
#endifBOOL PMail::GetMessageHeader(const PString & id, Header & hdrInfo){#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_flags flags = hUserInterface != NULL ? CMC_ERROR_UI_ALLOWED : 0; CMC_uint32 count = 1; CMC_message_summary * message; CMC_message_reference_ptr seed = id; lastError = cmc.list(sessionId, NULL, flags, seed, &count, hUserInterface, &message, NULL); if (lastError != CMC_SUCCESS) return FALSE; hdrInfo.subject = message->subject; hdrInfo.received = PTime(0, message->time_sent.minute, message->time_sent.hour, message->time_sent.day, message->time_sent.month, message->time_sent.year); hdrInfo.originatorName = message->originator->name; if (message->originator->address != 0) hdrInfo.originatorAddress = message->originator->address; else hdrInfo.originatorAddress = '"' + hdrInfo.originatorName + '"'; cmc.free_buf(message); return TRUE; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { MapiMessage * message; lastError = mapi.ReadMail(sessionId, (HWND)hUserInterface, id, MAPI_ENVELOPE_ONLY, 0, &message); if (lastError != SUCCESS_SUCCESS) return FALSE; PStringStream str = message->lpszDateReceived; int min, hr, day, mon, yr; char c; str >> yr >> c >> mon >> c >> day >> hr >> c >> min; hdrInfo.subject = message->lpszSubject; hdrInfo.received = PTime(0, min, hr, day, mon, yr); hdrInfo.originatorName = message->lpOriginator->lpszName; if (message->lpOriginator->lpszAddress != 0) hdrInfo.originatorAddress = message->lpOriginator->lpszAddress; else hdrInfo.originatorAddress = '"' + hdrInfo.originatorName + '"'; mapi.FreeBuffer(message); return TRUE; }#endif lastError = 1; return FALSE;}BOOL PMail::GetMessageBody(const PString & id, PString & body, BOOL markAsRead){ body = PString();#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_flags flags = CMC_MSG_AND_ATT_HDRS_ONLY; if (!markAsRead) flags |= CMC_DO_NOT_MARK_AS_READ; if (hUserInterface != NULL) flags |= CMC_ERROR_UI_ALLOWED; CMC_message_reference_ptr seed = id; CMC_message * message; lastError = cmc.read(sessionId,seed,flags,&message,hUserInterface,NULL); if (lastError != CMC_SUCCESS) return FALSE; if (message->text_note != NULL) body = message->text_note; BOOL ok = (message->message_flags&CMC_MSG_TEXT_NOTE_AS_FILE) == 0; cmc.free_buf(message); return ok; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { FLAGS flags = MAPI_SUPPRESS_ATTACH; if (!markAsRead) flags |= MAPI_PEEK; MapiMessage * message; lastError = mapi.ReadMail(sessionId, (HWND)hUserInterface, id, flags, 0, &message); if (lastError != SUCCESS_SUCCESS) return FALSE; body = message->lpszNoteText; mapi.FreeBuffer(message); return TRUE; }#endif lastError = 1; return FALSE;}BOOL PMail::GetMessageAttachments(const PString & id, PStringArray & filenames, BOOL includeBody, BOOL markAsRead){ filenames.SetSize(0);#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_flags flags = 0; if (!markAsRead) flags |= CMC_DO_NOT_MARK_AS_READ; if (hUserInterface != NULL) flags |= CMC_ERROR_UI_ALLOWED; CMC_message_reference_ptr seed = id; CMC_message * message; lastError = cmc.read(sessionId,seed,flags,&message,hUserInterface,NULL); if (lastError != CMC_SUCCESS) return FALSE; if (message->attachments != NULL) { PINDEX total = 1; for (CMC_attachment * attachment = message->attachments; (attachment->attach_flags&CMC_ATT_LAST_ELEMENT) != 0; attachment++) total++; filenames.SetSize(total); PINDEX attnum = 0; attachment = &message->attachments[attnum]; do { if (includeBody || (message->message_flags&CMC_MSG_TEXT_NOTE_AS_FILE) == 0) filenames[attnum++] = attachment->attach_filename; } while (((attachment++)->attach_flags&CMC_ATT_LAST_ELEMENT) != 0); } cmc.free_buf(message); return TRUE; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { FLAGS flags = 0; if (includeBody) flags |= MAPI_BODY_AS_FILE; if (!markAsRead) flags |= MAPI_PEEK; MapiMessage * message; lastError = mapi.ReadMail(sessionId, (HWND)hUserInterface, id, flags, 0, &message); if (lastError != SUCCESS_SUCCESS) return FALSE; filenames.SetSize(message->nFileCount); for (PINDEX i = 0; i < filenames.GetSize(); i++) filenames[i] = message->lpFiles[i].lpszPathName; mapi.FreeBuffer(message); return TRUE; }#endif lastError = 1; return FALSE;}BOOL PMail::MarkMessageRead(const PString & id){#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_flags flags = CMC_MSG_AND_ATT_HDRS_ONLY; if (hUserInterface != NULL) flags |= CMC_ERROR_UI_ALLOWED; CMC_message_reference_ptr seed = id; CMC_message * message; lastError = cmc.read(sessionId,seed,flags,&message,hUserInterface,NULL); if (lastError != CMC_SUCCESS) return FALSE; cmc.free_buf(message); return TRUE; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { MapiMessage * message; lastError = mapi.ReadMail(sessionId, (HWND)hUserInterface, id, MAPI_ENVELOPE_ONLY, 0, &message); if (lastError != SUCCESS_SUCCESS) return FALSE; mapi.FreeBuffer(message); return TRUE; }#endif lastError = 1; return FALSE;}BOOL PMail::DeleteMessage(const PString & id){#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_flags flags = hUserInterface != NULL ? CMC_ERROR_UI_ALLOWED : 0; CMC_message_reference_ptr seed = id; lastError = cmc.act_on(sessionId, seed, CMC_ACT_ON_DELETE, flags, hUserInterface, NULL); return lastError == CMC_SUCCESS; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { lastError = mapi.DeleteMail(sessionId, (HWND)hUserInterface, id, 0, 0); return lastError == SUCCESS_SUCCESS; }#endif lastError = 1; return FALSE;}PMail::LookUpResult PMail::LookUp(const PString & name, PString * fullName){#if P_HAS_CMC if (cmc.IsLoaded()) { CMC_recipient recip_in; memset(&recip_in, 0, sizeof(recip_in)); recip_in.name = (CMC_string)(const char *)name; recip_in.recip_flags = CMC_RECIP_LAST_ELEMENT; CMC_recipient * recip_out; CMC_uint32 count = 1; lastError = cmc.look_up(sessionId, &recip_in, CMC_LOOKUP_RESOLVE_IDENTITY, (CMC_ui_id)hUserInterface, &count, &recip_out, NULL); switch (lastError) { case CMC_SUCCESS : if (fullName != NULL) *fullName = recip_out->name; cmc.free_buf(recip_out); return ValidUser; case CMC_E_AMBIGUOUS_RECIPIENT : return AmbiguousUser; case CMC_E_RECIPIENT_NOT_FOUND : return UnknownUser; } return LookUpError; }#endif#if P_HAS_MAPI if (mapi.IsLoaded()) { MapiRecipDesc * recip; lastError = mapi.ResolveName(sessionId, (HWND)hUserInterface, name, MAPI_AB_NOMODIFY, 0, &recip); switch (lastError) { case SUCCESS_SUCCESS : if (fullName != NULL) *fullName = recip->lpszName; mapi.FreeBuffer(recip); return ValidUser; case MAPI_E_AMBIGUOUS_RECIPIENT : return AmbiguousUser; case MAPI_E_UNKNOWN_RECIPIENT : return UnknownUser; } return LookUpError; }#endif lastError = 1; return LookUpError;}int PMail::GetErrorCode() const{ return (int)lastError;}PString PMail::GetErrorText() const{#if P_HAS_CMC static const char * const cmcErrMsg[] = { "CMC_SUCCESS", "CMC_E_AMBIGUOUS_RECIPIENT", "CMC_E_ATTACHMENT_NOT_FOUND", "CMC_E_ATTACHMENT_OPEN_FAILURE", "CMC_E_ATTACHMENT_READ_FAILURE", "CMC_E_ATTACHMENT_WRITE_FAILURE", "CMC_E_COUNTED_STRING_UNSUPPORTED", "CMC_E_DISK_FULL", "CMC_E_FAILURE", "CMC_E_INSUFFICIENT_MEMORY", "CMC_E_INVALID_CONFIGURATION", "CMC_E_INVALID_ENUM", "CMC_E_INVALID_FLAG", "CMC_E_INVALID_MEMORY", "CMC_E_INVALID_MESSAGE_PARAMETER", "CMC_E_INVALID_MESSAGE_REFERENCE", "CMC_E_INVALID_PARAMETER", "CMC_E_INVALID_SESSION_ID", "CMC_E_INVALID_UI_ID", "CMC_E_LOGON_FAILURE", "CMC_E_MESSAGE_IN_USE", "CMC_E_NOT_SUPPORTED", "CMC_E_PASSWORD_REQUIRED", "CMC_E_RECIPIENT_NOT_FOUND", "CMC_E_SERVICE_UNAVAILABLE", "CMC_E_TEXT_TOO_LARGE", "CMC_E_TOO_MANY_FILES", "CMC_E_TOO_MANY_RECIPIENTS", "CMC_E_UNABLE_TO_NOT_MARK_AS_READ", "CMC_E_UNRECOGNIZED_MESSAGE_TYPE", "CMC_E_UNSUPPORTED_ACTION", "CMC_E_UNSUPPORTED_CHARACTER_SET", "CMC_E_UNSUPPORTED_DATA_EXT", "CMC_E_UNSUPPORTED_FLAG", "CMC_E_UNSUPPORTED_FUNCTION_EXT", "CMC_E_UNSUPPORTED_VERSION", "CMC_E_USER_CANCEL", "CMC_E_USER_NOT_LOGGED_ON" }; if (cmc.IsLoaded()) { if (lastError < PARRAYSIZE(cmcErrMsg)) return cmcErrMsg[lastError]; return PString(PString::Printf, "CMC Error=%lu", lastError); }#endif#if P_HAS_MAPI static const char * const mapiErrMsg[] = { "SUCCESS_SUCCESS", "MAPI_USER_ABORT", "MAPI_E_FAILURE", "MAPI_E_LOGIN_FAILURE", "MAPI_E_DISK_FULL", "MAPI_E_INSUFFICIENT_MEMORY", "MAPI_E_ACCESS_DENIED", "MAPI_E_UNKNOWN", "MAPI_E_TOO_MANY_SESSIONS", "MAPI_E_TOO_MANY_FILES", "MAPI_E_TOO_MANY_RECIPIENTS", "MAPI_E_ATTACHMENT_NOT_FOUND", "MAPI_E_ATTACHMENT_OPEN_FAILURE", "MAPI_E_ATTACHMENT_WRITE_FAILURE", "MAPI_E_UNKNOWN_RECIPIENT", "MAPI_E_BAD_RECIPTYPE", "MAPI_E_NO_MESSAGES", "MAPI_E_INVALID_MESSAGE", "MAPI_E_TEXT_TOO_LARGE", "MAPI_E_INVALID_SESSION", "MAPI_E_TYPE_NOT_SUPPORTED", "MAPI_E_AMBIGUOUS_RECIPIENT", "MAPI_E_MESSAGE_IN_USE", "MAPI_E_NETWORK_FAILURE", "MAPI_E_INVALID_EDITFIELDS", "MAPI_E_INVALID_RECIPS", "MAPI_E_NOT_SUPPORTED" }; if (mapi.IsLoaded()) { if (lastError < PARRAYSIZE(mapiErrMsg)) return mapiErrMsg[lastError]; return PString(PString::Printf, "MAPI Error=%lu", lastError); }#endif return "No mail library loaded.";}#if P_HAS_CMCPMail::CMCDLL::CMCDLL()#ifdef _WIN32 : PDynaLink("MAPI32.DLL")#else : PDynaLink("CMC.DLL")#endif{ if (!GetFunction("cmc_logon", (Function &)logon) || !GetFunction("cmc_logoff", (Function &)logoff) || !GetFunction("cmc_free", (Function &)free_buf) || !GetFunction("cmc_query_configuration", (Function &)query_configuration) || !GetFunction("cmc_look_up", (Function &)look_up) || !GetFunction("cmc_list", (Function &)list) || !GetFunction("cmc_send", (Function &)send) || !GetFunction("cmc_read", (Function &)read) || !GetFunction("cmc_act_on", (Function &)act_on)) Close();}#endif#if P_HAS_MAPIPMail::MAPIDLL::MAPIDLL()#ifdef _WIN32 : PDynaLink("MAPI32.DLL")#else : PDynaLink("MAPI.DLL")#endif{ if (!GetFunction("MAPILogon", (Function &)Logon) || !GetFunction("MAPILogoff", (Function &)Logoff) || !GetFunction("MAPISendMail", (Function &)SendMail) || !GetFunction("MAPISendDocuments", (Function &)SendDocuments) || !GetFunction("MAPIFindNext", (Function &)FindNext) || !GetFunction("MAPIReadMail", (Function &)ReadMail) || !GetFunction("MAPISaveMail", (Function &)SaveMail) || !GetFunction("MAPIDeleteMail", (Function &)DeleteMail) || !GetFunction("MAPIFreeBuffer", (Function &)FreeBuffer) || !GetFunction("MAPIAddress", (Function &)Address) || !GetFunction("MAPIDetails", (Function &)Details) || !GetFunction("MAPIResolveName", (Function &)ResolveName)) Close();}#endif// End Of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?