⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpmodel.cpp

📁 DarkATLSmtp(SMTP COM 组件原创代码),注册后可在Delphi中发邮件。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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( &ltime );
	today = localtime( &ltime );
	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 + -