#include "faxrtp.h" #pragma hdrstop LPVOID InboundProfileInfo; BOOL InitializeEmailRouting( VOID ) { PLIST_ENTRY Next; PROUTING_TABLE RoutingEntry; // // initialize the profiles // EnterCriticalSection( &CsRouting ); if (InboundProfileName && InboundProfileName[0]) { InboundProfileInfo = AddNewMapiProfile( InboundProfileName, TRUE, TRUE ); if (!InboundProfileInfo) { DebugPrint(( TEXT("Could not initialize inbound mapi profile [%s]"), InboundProfileName )); } } Next = RoutingListHead.Flink; if (Next) { while ((ULONG)Next != (ULONG)&RoutingListHead) { RoutingEntry = CONTAINING_RECORD( Next, ROUTING_TABLE, ListEntry ); Next = RoutingEntry->ListEntry.Flink; if (RoutingEntry->Mask & LR_INBOX && RoutingEntry->ProfileName && RoutingEntry->ProfileName[0]) { RoutingEntry->ProfileInfo = AddNewMapiProfile( RoutingEntry->ProfileName, FALSE, TRUE ); } } } LeaveCriticalSection( &CsRouting ); return TRUE; } BOOL TiffMailDefault( PFAX_ROUTE FaxRoute, PROUTING_TABLE RoutingEntry ) /*++ Routine Description: Mails a TIFF file to the inbox in the specified profile. Arguments: TiffFileName - Name of TIFF file to mail ProfileName - Profile name to use ResultCode - The result of the failed API call Return Value: TRUE for success, FALSE on error --*/ { LPTSTR BodyStr = NULL; BOOL Failed = FALSE; DWORD MsgCount; LPDWORD MsgPtr[6]; TCHAR MsgStr[2048]; TCHAR PageCountStr[64]; LPTSTR SenderStr = NULL; LPTSTR SubjectStr = NULL; LPTSTR RecipStr = NULL; TCHAR TimeStr[128]; ULONG ResultCode; if (!RoutingEntry->ProfileInfo) { ResultCode = ERROR_NO_SUCH_LOGON_SESSION; return FALSE; } ResultCode = ERROR_SUCCESS; FormatElapsedTimeStr( (FILETIME*)&FaxRoute->ElapsedTime, TimeStr, sizeof(TimeStr) ); _ltot( (LONG) FaxRoute->PageCount, PageCountStr, 10 ); MsgPtr[0] = (LPDWORD) FaxRoute->Csid; MsgPtr[1] = (LPDWORD) FaxRoute->CallerId; if (!FaxRoute->RoutingInfo || !FaxRoute->RoutingInfo[0]) { RecipStr = FaxRoute->Csid ? FaxRoute->Csid : TEXT(""); } else { RecipStr = FaxRoute->RoutingInfo; } MsgPtr[2] = (LPDWORD) RecipStr; MsgPtr[3] = (LPDWORD) PageCountStr; MsgPtr[4] = (LPDWORD) TimeStr; MsgPtr[5] = (LPDWORD) FaxRoute->DeviceName; MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_MAIL_MSG_BODY, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), (va_list *) MsgPtr ); BodyStr = StringDup( MsgStr ); if (FaxRoute->Csid != NULL && FaxRoute->Csid[0] != 0) { SenderStr = StringDup( FaxRoute->Csid ); } else { MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_WHO_AM_I, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), NULL ); if (MsgCount != 0) { SenderStr = StringDup(MsgStr); } } MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_SUBJECT_LINE, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), NULL ); if (MsgCount != 0) { SubjectStr = StringDup( MsgStr ); } Failed = StoreMapiMessage( RoutingEntry->ProfileInfo, SenderStr, SubjectStr, BodyStr, FaxRoute->FileName, NULL, IMPORTANCE_NORMAL, NULL, &ResultCode ); MemFree( BodyStr ); MemFree( SubjectStr ); MemFree( SenderStr ); return Failed; } BOOL TiffRouteEMail( PFAX_ROUTE FaxRoute, PROUTING_TABLE RoutingEntry ) /*++ Routine Description: Mails a TIFF file to the inbox in the specified profile. Arguments: TiffFileName - Name of TIFF file to mail ProfileName - Profile name to use ResultCode - The result of the failed API call Return Value: TRUE for success, FALSE on error --*/ { LPWSTR BodyStr = NULL; BOOL Failed = FALSE; DWORD MsgCount; LPDWORD MsgPtr[6]; WCHAR MsgStr[2048]; WCHAR PageCountStr[64]; LPWSTR SenderStr = NULL; LPWSTR SubjectStr = NULL; WCHAR TimeStr[128]; LPWSTR RecipientName = NULL; LPWSTR ProxyAddress = NULL; ULONG ResultCode; if (!InboundProfileInfo) { ResultCode = ERROR_NO_SUCH_LOGON_SESSION; return FALSE; } if (FaxRoute->RoutingInfo && FaxRoute->RoutingInfo[0]) { RecipientName = FaxRoute->RoutingInfo; } else if (FaxRoute->Csid && FaxRoute->Csid[0]) { RecipientName = FaxRoute->Csid; } if (!RecipientName) { return FALSE; } ProxyAddress = (LPTSTR) MemAlloc( StringSize( RecipientName ) + 32 ); if (!ProxyAddress) { return FALSE; } _stprintf( ProxyAddress, TEXT("FAX:FAX[%s]"), RecipientName ); ResultCode = ERROR_SUCCESS; FormatElapsedTimeStr( (FILETIME*)&FaxRoute->ElapsedTime, TimeStr, sizeof(TimeStr) ); _ltot( (LONG) FaxRoute->PageCount, PageCountStr, 10 ); MsgPtr[0] = (LPDWORD) FaxRoute->Csid; MsgPtr[1] = (LPDWORD) FaxRoute->CallerId; MsgPtr[2] = (LPDWORD) (FaxRoute->RoutingInfo ? FaxRoute->RoutingInfo : TEXT("")); MsgPtr[3] = (LPDWORD) PageCountStr; MsgPtr[4] = (LPDWORD) TimeStr; MsgPtr[5] = (LPDWORD) FaxRoute->DeviceName; MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_MAIL_MSG_BODY, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), (va_list *) MsgPtr ); BodyStr = StringDup( MsgStr ); if (FaxRoute->Csid != NULL && FaxRoute->Csid[0] != 0) { SenderStr = StringDup( FaxRoute->Csid ); } else { MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_WHO_AM_I, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), NULL ); if (MsgCount != 0) { SenderStr = StringDup(MsgStr); } } MsgCount = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, MSG_SUBJECT_LINE, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT), MsgStr, sizeof(MsgStr), NULL ); if (MsgCount != 0) { SubjectStr = StringDup( MsgStr ); } Failed = MailMapiMessage( InboundProfileInfo, ProxyAddress, SubjectStr, BodyStr, FaxRoute->FileName, NULL, IMPORTANCE_NORMAL, &ResultCode ); MemFree( BodyStr ); MemFree( SubjectStr ); MemFree( SenderStr ); MemFree( ProxyAddress ); return Failed; }