📄 smtpmodel.cpp
字号:
strMailPath+="*.*";
WIN32_FIND_DATA tagFindData;
HANDLE hResult=FindFirstFile(strMailPath,&tagFindData);
while(TRUE)
{
BOOL bResult=::FindNextFile(hResult,&tagFindData);
if(!bResult)
{
FindClose(hResult);
break;
}
else if(tagFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
CString strFileName=tagFindData.cFileName;
if(strFileName==".."||strFileName==".")
continue;
CString strFilePath=strMailPathTemp+strFileName;
strFilePath+='\\';
strFilePath+=strFileName;
strFilePath+=".ini";
HANDLE hFile=::CreateFile(strFilePath, GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
CString strTemp=strMailPathTemp+strFileName;
strTemp+='\\';
if((HANDLE)hFile==INVALID_HANDLE_VALUE)
DeleteDirectory(strTemp);
else
CloseHandle(hFile);
}
}// End while
return S_OK;
}
STDMETHODIMP CSmtpModel::SaveMailToSaveBoxForWeb(VARIANT bstMailPath, VARIANT bstUserId, VARIANT bstMsgId)
{
// TODO: Add your implementation code here
USES_CONVERSION;
char* pMsgId;
char* pMailPath;
char* pUserId;
VARIANTTOCHAR(bstMailPath,pMailPath);
VARIANTTOCHAR(bstUserId,pUserId);
VARIANTTOCHAR(bstMsgId,pMsgId);
CString strMailPath=pMailPath;
CString strUserId=pUserId;
strMailPath.TrimLeft();strMailPath.TrimRight();
strUserId.TrimLeft();strUserId.TrimRight();
CString strMsgId=pMsgId;
strMsgId.TrimLeft();strMsgId.TrimRight();
if(strMailPath.IsEmpty()||strUserId.IsEmpty())
return S_OK;
if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
strMailPath+='\\';
strMailPath+=strUserId;
strMailPath+='\\';
::CreateDirectory(strMailPath,NULL);
CString strMailPathTemp=strMailPath;
//Create the .ini file
if(strMsgId.IsEmpty())
{
strMsgId=GetGUID();
CString strTemp=strMailPath+strMsgId;
strTemp+='\\';
::CreateDirectory(strTemp,NULL);
}
strMailPath+=strMsgId;
strMailPath+='\\';
strMailPath+=strMsgId;
strMailPath+=".ini";
HANDLE hFile=CreateFile(strMailPath,
GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
if(hFile==INVALID_HANDLE_VALUE)
return S_OK;
DWORD dwWriteCount=0;
//Write strMsgId
CString strTemp=STR_KEY_MSGID;
strTemp+=strMsgId;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
//Write strFrom
strTemp=STR_KEY_FROM;
LPTSTR pFromName=W2T(m_bstrFromName.m_str);
if(strlen(pFromName)>0)
{
strTemp+='\"';
strTemp+=pFromName;
strTemp+='\"';
strTemp+=" ";
}
LPTSTR pFrom=W2T(m_bstrFrom.m_str);
strTemp+='<';
strTemp+=pFrom;
strTemp+='>';
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
char szBuffer[512];
//Write strTo
strTemp=STR_KEY_TO;
CString strTo="";
for(int i=0;i<m_arrTo.GetCount();i++)
{
LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrTo.GetAt(m_arrTo.FindIndex(i));
if(pAddrInfo==NULL)
continue;
if(!strTo.IsEmpty())
strTo+=",";
CString strTempTo="";
if(pAddrInfo->strStringName.IsEmpty())
strTempTo.Format("%s",pAddrInfo->strStringAddr);
else
strTempTo.Format("\"%s\" <%s>",pAddrInfo->strStringName,pAddrInfo->strStringAddr);
strTo+=strTempTo;
}
strTemp+=strTo;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
strTemp=STR_KEY_CC;
strTo="";
for(i=0;i<m_arrCC.GetCount();i++)
{
LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrCC.GetAt(m_arrCC.FindIndex(i));
if(pAddrInfo==NULL)
continue;
if(!strTo.IsEmpty())
strTo+=",";
CString strTempTo="";
if(pAddrInfo->strStringName.IsEmpty())
strTempTo.Format("%s",pAddrInfo->strStringAddr);
else
strTempTo.Format("\"%s\" <%s>",pAddrInfo->strStringName,pAddrInfo->strStringAddr);
strTo+=strTempTo;
}
strTemp+=strTo;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
strTemp=STR_KEY_BCC;
strTo="";
for(i=0;i<m_arrBCC.GetCount();i++)
{
LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrBCC.GetAt(m_arrBCC.FindIndex(i));
if(pAddrInfo==NULL)
continue;
if(!strTo.IsEmpty())
strTo+=",";
CString strTempTo="";
if(pAddrInfo->strStringName.IsEmpty())
strTempTo.Format("%s",pAddrInfo->strStringAddr);
else
strTempTo.Format("\"%s\" <%s>",pAddrInfo->strStringName,pAddrInfo->strStringAddr);
strTo+=strTempTo;
}
strTemp+=strTo;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
strTemp=STR_KEY_SUBJECT;
LPTSTR pSubject=W2T(m_bstrSubject.m_str);
strTemp+=pSubject;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
strTemp=STR_KEY_DATE;
// DATE/TIME
_tzset();
char szTimeZone[40];
BOOL bNegative = FALSE;
time_t ltime;
struct tm *today;
int zone=0;
zone = _timezone;
if( zone < 0 )
{
bNegative = TRUE;
zone = -zone;
}
sprintf( szTimeZone, " %c%02d00\r\n", bNegative ? '+' : '-', zone / 3600 );
time( <ime );
today = localtime( <ime );
strftime( szBuffer, 128, "%a, %d %b %Y %H:%M:%S", today );
CString strDate=szBuffer;
strDate+=szTimeZone;
strTemp+=strDate;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
//write the mail size
LPTSTR pBody=W2T(m_bstrBody.m_str);
CString strBody=pBody;
strBody.Replace("\n","\n<br>");
DWORD dwSize=strBody.GetLength();
if(m_arrAttachment.GetCount()>0)
{
for(i=0;i<m_arrAttachment.GetCount();i++)
{
LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrAttachment.GetAt(m_arrAttachment.FindIndex(i));
if(pAddrInfo==NULL)
continue;
CString strFilePath=pAddrInfo->strStringAddr;
HANDLE hFileTemp=CreateFile(strFilePath,GENERIC_READ,
0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
if((HANDLE)hFileTemp==INVALID_HANDLE_VALUE)
continue;
dwSize+=GetFileSize(hFileTemp,NULL);
CloseHandle(hFileTemp);
}
}
strTemp.Format("%d",dwSize);
strTemp=STR_KEY_MSGSIZE+strTemp;
strTemp+="\r\n";
WRITESTRINGTOFILE(strTemp);
strTemp=STR_KEY_STATE;
strTemp+="0\r\n";
WRITESTRINGTOFILE(strTemp);
CloseHandle(hFile);
//Write the body to .htm file
CString strBodyPath=strMailPathTemp;
strBodyPath+=strMsgId;
strBodyPath+='\\';
strBodyPath+=strMsgId;
strBodyPath+=".htm";
hFile=CreateFile(strBodyPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
if((HANDLE)hFile==INVALID_HANDLE_VALUE)
return S_OK;
WRITESTRINGTOFILE(strBody);
CloseHandle(hFile);
CString strIndexPath=strMailPathTemp;
strIndexPath+=STR_FILENAME_SAVEIDLIST;
//Add message index to dst .ini file
WriteMsgIdToIni(strIndexPath,strMsgId);
return S_OK;
}
STDMETHODIMP CSmtpModel::GetLocalHostIp(VARIANT *pLocalIp)
{
// TODO: Add your implementation code here
CString strLocalIp=CDPSocketModel::GetLocalHostIp();
CComBSTR bstReturn=strLocalIp;
pLocalIp->vt=VT_BSTR;
pLocalIp->bstrVal=bstReturn.Detach();
return S_OK;
}
STDMETHODIMP CSmtpModel::GetCompanyUserListForWeb(VARIANT bstMailPath,
VARIANT bstGroupName,
VARIANT *pMemberList)
{
// TODO: Add your implementation code here
USES_CONVERSION;
char* pMailPath;
char* pGroupName;
VARIANTTOCHAR(bstMailPath,pMailPath)
VARIANTTOCHAR(bstGroupName,pGroupName)
CString strMailPath=pMailPath;
CString strGroupName=pGroupName;
strMailPath.TrimLeft();strMailPath.TrimRight();
strGroupName.TrimLeft();strGroupName.TrimRight();
if(strMailPath.IsEmpty()||strGroupName.IsEmpty())
return S_OK;
if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
strMailPath+='\\';
strMailPath+=STR_FILENAME_COMPANYUSER;
HANDLE hFile=::CreateFile(strMailPath, GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if((HANDLE)hFile==INVALID_HANDLE_VALUE)
return S_OK;
DWORD dwFileLength=GetFileSize(hFile,NULL);
if((LONG)dwFileLength<=0)
{
CloseHandle(hFile);
return S_OK;
}
char* pFileBuf=new char[dwFileLength+1];
DWORD dwReadLength=0;
BOOL bResult=ReadFile(hFile,pFileBuf,dwFileLength,&dwReadLength,NULL);
CloseHandle(hFile);
if(!bResult)
{
delete []pFileBuf;
return S_OK;
}
pFileBuf[dwFileLength]='\0';
CString strFileBuf=pFileBuf;
if(pFileBuf)
delete []pFileBuf;
CString strFileBufBak=strFileBuf;
int nUserCount=0;
while(!strFileBuf.IsEmpty())
{
CString strLine="";
int nEnd=strFileBuf.Find("\n");
if(nEnd<0)
{
strLine=strFileBuf;
strFileBuf="";
}
else
{
strLine=strFileBuf.Left(++nEnd);
strFileBuf=strFileBuf.Mid(nEnd);
}
strLine.TrimLeft();strLine.TrimRight();
CString strUserId;
CString strUserNick;
CString strGroupNameTemp;
nEnd=strLine.Find(",");
if(nEnd<0)
continue;
strUserId=strLine.Left(nEnd);
strLine=strLine.Mid(++nEnd);
nEnd=strLine.Find(",");
if(nEnd<0)
continue;
strUserNick=strLine.Left(nEnd);
strLine=strLine.Mid(++nEnd);
strGroupNameTemp=strLine;
strGroupNameTemp.TrimLeft();strGroupNameTemp.TrimRight();
if(strGroupNameTemp!=strGroupName)
continue;
nUserCount++;
}
SAFEARRAYBOUND safeBound[2];
safeBound[0].cElements=nUserCount;
safeBound[0].lLbound=0;
safeBound[1].cElements=2;
safeBound[1].lLbound=0;
VariantInit(pMemberList);
pMemberList->vt=VT_VARIANT | VT_ARRAY;
pMemberList->parray=SafeArrayCreate(VT_VARIANT,2,safeBound);
long lDimension[2];
int nNum=0;
while(!strFileBufBak.IsEmpty())
{
CString strLine="";
int nEnd=strFileBufBak.Find("\n");
if(nEnd<0)
{
strLine=strFileBufBak;
strFileBufBak="";
}
else
{
strLine=strFileBufBak.Left(++nEnd);
strFileBufBak=strFileBufBak.Mid(nEnd);
}
strLine.TrimLeft();strLine.TrimRight();
CString strUserId;
CString strUserNick;
CString strGroupNameTemp;
nEnd=strLine.Find(",");
if(nEnd<0)
continue;
strUserId=strLine.Left(nEnd);
strUserId.TrimLeft();strUserId.TrimRight();
strLine=strLine.Mid(++nEnd);
nEnd=strLine.Find(",");
if(nEnd<0)
continue;
strUserNick=strLine.Left(nEnd);
strUserNick.TrimLeft();strUserNick.TrimRight();
strLine=strLine.Mid(++nEnd);
strGroupNameTemp=strLine;
strGroupNameTemp.TrimLeft();strGroupNameTemp.TrimRight();
if(strGroupNameTemp!=strGroupName)
continue;
lDimension[0]=nNum;
lDimension[1]=0;
CComVariant cvtMemberId(strUserId);
SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberId);
lDimension[0]=nNum;
lDimension[1]=1;
CComVariant cvtMemberNick(strUserNick);
SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberNick);
nNum++;
}
return S_OK;
}
STDMETHODIMP CSmtpModel::GetCompanyGroupListForWeb(VARIANT bstMailPath, VARIANT *pMemberList)
{
// TODO: Add your implementation code here
USES_CONVERSION;
char* pMailPath;
VARIANTTOCHAR(bstMailPath,pMailPath)
CString strMailPath=pMailPath;
strMailPath.TrimLeft();strMailPath.TrimRight();
if(strMailPath.IsEmpty())
return S_OK;
if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
strMailPath+='\\';
strMailPath+=STR_FILENAME_COMPANYGROUP;
HANDLE hFile=::CreateFile(strMailPath, GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if((HANDLE)hFile==INVALID_HANDLE_VALUE)
return S_OK;
DWORD dwFileLength=GetFileSize(hFile,NULL);
if((LONG)dwFileLength<=0)
{
CloseHandle(hFile);
return S_OK;
}
char* pFileBuf=new char[dwFileLength+1];
DWORD dwReadLength=0;
BOOL bResult=ReadFile(hFile,pFileBuf,dwFileLength,&dwReadLength,NULL);
CloseHandle(hFile);
if(!bResult)
{
delete []pFileBuf;
return S_OK;
}
pFileBuf[dwFileLength]='\0';
CString strFileBuf=pFileBuf;
if(pFileBuf)
delete []pFileBuf;
CString strFileBufBak=strFileBuf;
int nGroupCount=0;
while(!strFileBuf.IsEmpty())
{
CString strLine="";
int nEnd=strFileBuf.Find("\n");
if(nEnd<0)
{
strLine=strFileBuf;
strFileBuf="";
}
else
{
strLine=strFileBuf.Left(++nEnd);
strFileBuf=strFileBuf.Mid(nEnd);
}
strLine.TrimLeft();strLine.TrimRight();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -