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

📄 smtpmodel.cpp

📁 DarkATLSmtp(SMTP COM 组件原创代码),注册后可在Delphi中发邮件。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	CString strGroupUserIniPath=strMailPathTemp+STR_FILENAME_GROUPUSERLIST;
	CString strFile;
	GetContentFromTextFile(strGroupUserIniPath,&strFile);
	
	int nUserCount=GetGroupLineCountFromMem(strFile,strGroupName);
	SAFEARRAYBOUND safeBound[2];
	safeBound[0].cElements=nUserCount;
	safeBound[0].lLbound=0;

	safeBound[1].cElements=6;
	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;
	CString strTempLine=STR_KEY_GROUPNAME+strGroupName+STR_KEY_FIELDSPACE;
	while(!strFile.IsEmpty())
	{
		int nEnd=strFile.Find("\n");
		CString strTemp="";
		if(nEnd<0)
		{
			strTemp=strFile;
			strFile="";
		}
		else
		{
			strTemp=strFile.Left(nEnd);
			strFile=strFile.Mid(++nEnd);
		}
		strTemp.TrimLeft();strTemp.TrimRight();
		if(strTemp.IsEmpty())
			continue;
		int nStart=strTemp.Find(strTempLine);
		if(nStart<0)
			continue;

		CString strMemberId=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERID,";");
		strMemberId.TrimLeft();strMemberId.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=0;
		CComVariant cvtMemberId(strMemberId);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberId);

		CString strMemberName=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERNAME,";");
		strMemberName.TrimLeft();strMemberName.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=1;
		CComVariant cvtMemberName(strMemberName);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberName);

		CString strMemberNick=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERNICK,";");
		strMemberNick.TrimLeft();strMemberNick.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=2;
		CComVariant cvtMemberNick(strMemberNick);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberNick);

		CString strMemberAddr=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERADDR,";");
		strMemberAddr.TrimLeft();strMemberAddr.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=3;
		CComVariant cvtMemberAddr(strMemberAddr);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberAddr);

		CString strMemberRemark=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERREMARK,";");
		strMemberRemark.TrimLeft();strMemberRemark.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=4;
		CComVariant cvtMemberRemark(strMemberRemark);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberRemark);	
		
		CString strMemberTel=GetValueByKeyFromBuf(strTemp,STR_KEY_MEMBERTEL,";");
		strMemberTel.TrimLeft();strMemberTel.TrimRight();
		lDimension[0]=nNum;
		lDimension[1]=5;
		CComVariant cvtMemberTel(strMemberTel);
		SafeArrayPutElement(pMemberList->parray,lDimension,&cvtMemberTel);	

		nNum++;
	}

	return S_OK;
}

STDMETHODIMP CSmtpModel::GetGroupListForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
											VARIANT *pGroupList)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return S_FALSE;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	CString strGroupIniPath=strMailPathTemp+STR_FILENAME_GROUPLIST;
	CString strFile;
	GetContentFromTextFile(strGroupIniPath,&strFile);
	int nGroupCount=GetLineCountFromMem(strFile);
	SAFEARRAYBOUND safeBound[1];
	safeBound[0].cElements=nGroupCount;
	safeBound[0].lLbound=0;

	VariantInit(pGroupList);
	pGroupList->vt=VT_VARIANT | VT_ARRAY;
	pGroupList->parray=SafeArrayCreate(VT_VARIANT,1,safeBound);

	long lDimension[1];
	int nNum=0;
	while(!strFile.IsEmpty())
	{
		int nEnd=strFile.Find("\n");
		CString strTemp="";
		if(nEnd<0)
		{
			strTemp=strFile;
			strFile="";
		}
		else
		{
			strTemp=strFile.Left(nEnd);
			strFile=strFile.Mid(++nEnd);
		}
		strTemp.TrimLeft();strTemp.TrimRight();
		if(strTemp.IsEmpty())
			continue;

		CString strGroupName=GetValueByKeyFromBuf(strTemp,STR_KEY_GROUPNAME);
		strGroupName.TrimLeft();strGroupName.TrimRight();

		lDimension[0]=nNum;
		CComVariant cvtGroupName(strGroupName);
		SafeArrayPutElement(pGroupList->parray,lDimension,&cvtGroupName);
		nNum++;
	}

	return S_OK;
}

STDMETHODIMP CSmtpModel::AddGroupUserForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
											VARIANT bstGroupName, VARIANT bstMemberName, 
											VARIANT bstMemberNick, VARIANT bstMemberAddr, 
											VARIANT bstMemberTel, VARIANT bstMemberRemark)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	char* pGroupName;
	char* pMemberName;
	char* pMemberNick;
	char* pMemberAddr;
	char* pMemberTel;
	char* pMemberRemark;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOCHAR(bstGroupName,pGroupName);
	VARIANTTOCHAR(bstMemberName,pMemberName);
	VARIANTTOCHAR(bstMemberNick,pMemberNick);
	VARIANTTOCHAR(bstMemberAddr,pMemberAddr);
	VARIANTTOCHAR(bstMemberTel,pMemberTel);
	VARIANTTOCHAR(bstMemberRemark,pMemberRemark);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	CString strGroupName=pGroupName;
	CString strMemberName=pMemberName;
	CString strMemberNick=pMemberNick;
	CString strMemberAddr=pMemberAddr;
	CString strMemberTel=pMemberTel;
	CString strMemberRemark=pMemberRemark;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	strGroupName.TrimLeft();strGroupName.TrimRight();
	strMemberName.TrimLeft();strMemberName.TrimRight();
	strMemberNick.TrimLeft();strMemberNick.TrimRight();
	strMemberAddr.TrimLeft();strMemberAddr.TrimRight();
	strMemberTel.TrimLeft();strMemberTel.TrimRight();
	strMemberRemark.TrimLeft();strMemberRemark.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty()||strGroupName.IsEmpty())
		return S_FALSE;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	::CreateDirectory(strMailPathTemp,NULL);
	CString strGroupUserIniPath=strMailPathTemp+STR_FILENAME_GROUPUSERLIST;
	WriteGroupUserToIni(strGroupUserIniPath,strGroupName,strMemberName,
		strMemberNick,strMemberAddr,strMemberTel,strMemberRemark);

	return S_OK;
}

STDMETHODIMP CSmtpModel::AddGroupNameForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
											VARIANT bstGroupName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	char* pGroupName;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOCHAR(bstGroupName,pGroupName);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	CString strGroupName=pGroupName;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	strGroupName.TrimLeft();strGroupName.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty()||strGroupName.IsEmpty())
		return S_FALSE;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	::CreateDirectory(strMailPathTemp,NULL);
	CString strGroupIniPath=strMailPathTemp+STR_FILENAME_GROUPLIST;

	WriteGroupNameToIni(strGroupIniPath,strGroupName);
	
	return S_OK;
}

STDMETHODIMP CSmtpModel::CreateAssistInfoForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
												VARIANT bstRejectMail, 
												VARIANT bstEnableReply, 
												VARIANT bstAutoReplyContent)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	char* pRejectMail;
	char* pEnableReply;
	char* pAutoReplyContent;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOCHAR(bstRejectMail,pRejectMail);
	VARIANTTOCHAR(bstEnableReply,pEnableReply);
	VARIANTTOCHAR(bstAutoReplyContent,pAutoReplyContent);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	CString strRejectMail=pRejectMail;
	CString strEnableReply=pEnableReply;
	CString strAutoReplyContent=pAutoReplyContent;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return S_FALSE;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	::CreateDirectory(strMailPathTemp,NULL);
	CString strAssistIniPath=strMailPathTemp+STR_FILENAME_ASSISTINFO;
	HANDLE hFile=CreateFile(strAssistIniPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
	if((HANDLE)hFile==INVALID_HANDLE_VALUE)
		return S_OK;
	
	CString strTemp=STR_KEY_REJECTMAIL;
	strTemp+=strRejectMail;
	strTemp+="\r\n";
	WRITESTRINGTOFILE(strTemp);

	strTemp=STR_KEY_ENABLEREPLY;
	strTemp+=strEnableReply;
	strTemp+="\r\n";
	WRITESTRINGTOFILE(strTemp);
	
	strTemp=STR_KEY_AUTOREPLYCONTENT;
	strTemp+=strAutoReplyContent;
	strTemp+="\r\n";
	WRITESTRINGTOFILE(strTemp);

	CloseHandle(hFile);

	return S_OK;
}


STDMETHODIMP CSmtpModel::CreateLevelInfoForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
											   VARIANT bstMailBoxSize, VARIANT bstUserLevel)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	long lMailBoxSize;
	long lUserLevel;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOLONG(bstMailBoxSize,lMailBoxSize);
	VARIANTTOLONG(bstUserLevel,lUserLevel);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return S_FALSE;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	::CreateDirectory(strMailPathTemp,NULL);
	CString strLevelIniPath=strMailPathTemp+STR_FILENAME_LEVELINFO;
	HANDLE hFile=CreateFile(strLevelIniPath,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
		FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
	if((HANDLE)hFile==INVALID_HANDLE_VALUE)
		return S_OK;

	CString strTemp=STR_KEY_MAILBOXSIZE;
	CString strMailBoxSize;
	strMailBoxSize.Format("%d",lMailBoxSize);
	strTemp+=strMailBoxSize;
	strTemp+="\r\n";
	WRITESTRINGTOFILE(strTemp);

	strTemp=STR_KEY_USERLEVEL;
	CString strUserLevel;
	strUserLevel.Format("%d",lUserLevel);
	strTemp+=strUserLevel;
	strTemp+="\r\n";
	WRITESTRINGTOFILE(strTemp);
	CloseHandle(hFile);
	
	return S_OK;
}


STDMETHODIMP CSmtpModel::CreateMailDirForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
											 VARIANT bstMailOldIndex, VARIANT *pMailNewIndex)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	char* pMailOldIndex;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOCHAR(bstMailOldIndex,pMailOldIndex);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	CString strMailOldIndex=pMailOldIndex;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	strMailOldIndex.TrimLeft();strMailOldIndex.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return S_FALSE;
	CComBSTR bstReturn=strMailOldIndex;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	strMailPathTemp+=strUserId;
	strMailPathTemp+='\\';
	::CreateDirectory(strMailPathTemp,NULL);
	//If the old index exist then we must check the index whether is true
	//If the old Index is false, we must create a new index for user
	//If the old index is true,we return old index to user
	if(!strMailOldIndex.IsEmpty())
	{
		CString strPath=strMailPathTemp;
		strPath+=strMailOldIndex;
		strPath+='\\';

		//if creating path is successful,the old index is false
		BOOL bResult=::CreateDirectory(strPath,NULL);
		if(bResult)
			DeleteDirectory(strPath);
		else
		{
			pMailNewIndex->vt=VT_BSTR;
			pMailNewIndex->bstrVal=bstReturn.Detach();
			return S_OK;
		}
	}
	CString strMailNewIndex=CreateMailDirForWeb(strMailPath,strUserId);
	bstReturn=strMailNewIndex;
	pMailNewIndex->vt=VT_BSTR;
	pMailNewIndex->bstrVal=bstReturn.Detach();
	return S_OK;
}

STDMETHODIMP CSmtpModel::DeleteAttachByNameForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
												  VARIANT bstMsgId, VARIANT bstAttachName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	char* pMsgIdTemp;
	char* pAttachName;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	VARIANTTOCHAR(bstMsgId,pMsgIdTemp);
	VARIANTTOCHAR(bstAttachName,pAttachName);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	CString strMsgId=pMsgIdTemp;
	CString strAttachName=pAttachName;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	strMsgId.TrimLeft();strMsgId.TrimRight();
	strAttachName.TrimLeft();strAttachName.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty()||strMsgId.IsEmpty()||strAttachName.IsEmpty())
		return S_OK;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	strMailPath+=strUserId;
	strMailPath+='\\';
	strMailPath+=strMsgId;
	strMailPath+='\\';
	strMailPath+=STR_DEFAULT_ATTACHMENT;
	strMailPath+='\\';
	strMailPath+=strAttachName;
	::DeleteFile(strMailPath);
	return S_OK;
}

STDMETHODIMP CSmtpModel::ClearMailBoxSpace(VARIANT bstMailPath, VARIANT bstUserId)
{
	USES_CONVERSION;
	char* pMailPath;
	char* pUserId;
	VARIANTTOCHAR(bstMailPath,pMailPath);
	VARIANTTOCHAR(bstUserId,pUserId);
	CString strMailPath=pMailPath;
	CString strUserId=pUserId;
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return S_OK;
	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	strMailPath+=strUserId;
	strMailPath+='\\';
	CString strMailPathTemp=strMailPath;
	// TODO: Add your implementation code here

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -