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

📄 smtpmodel.cpp

📁 DarkATLSmtp(SMTP COM 组件原创代码),注册后可在Delphi中发邮件。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	LPTSTR pProxyHostName=W2T(m_bstrProxyHostName);
	CString strErrorText;
	BOOL bProxyNeedAuth=FALSE;
	BOOL bResult=m_pSmtpConnect->Connect(pHostName,pUserName,
		pPassWord,m_nHostPort,(int)m_enumProxyType,bProxyNeedAuth,
		pProxyUserName,pProxyPassWord,pProxyHostName,m_nProxyPort,strErrorText);
	CComBSTR cbstTemp=strErrorText;
	pErrorInfo->vt=VT_BSTR;
	pErrorInfo->bstrVal=cbstTemp.Detach();
	pSuccess->boolVal=bResult?VARIANT_TRUE:VARIANT_FALSE;
	if(bResult)
		return S_OK;
	return Error(pErrorInfo->bstrVal);
}

STDMETHODIMP CSmtpModel::Disconnect()
{
	// TODO: Add your implementation code here
	if(m_pSmtpConnect==NULL)
		return S_OK;
	if(!m_pSmtpConnect->Disconnect())
		return S_FALSE;
	return S_OK;
}

STDMETHODIMP CSmtpModel::SendMail()
{
	// TODO: Add your implementation code here
	if(m_pSmtpConnect==NULL)
		return S_OK;
	CSmtpMessage clsMessage;
	clsMessage.m_pArrAttachment=&m_arrAttachment;
	clsMessage.m_pArrBCC=&m_arrBCC;
	clsMessage.m_pArrCC=&m_arrCC;
	clsMessage.m_pArrReplyTo=&m_arrReplyTo;
	clsMessage.m_pArrTo=&m_arrTo;
	clsMessage.m_strFrom=m_bstrFrom;
	clsMessage.m_strBody=m_bstrBody;
	clsMessage.m_strFromName=m_bstrFromName;
	clsMessage.m_strSubject=m_bstrSubject;
	clsMessage.m_strFrom.TrimLeft();clsMessage.m_strFrom.TrimLeft();
	clsMessage.m_strFromName.TrimLeft();clsMessage.m_strFromName.TrimRight();
	clsMessage.m_bHTML=m_bHTML;

	return m_pSmtpConnect->SendMail(clsMessage)?S_OK:E_FAIL;
}

CString CSmtpModel::CreateMailDirForWeb(CString strMailPath,CString strUserId)
{
	CString strReturn="";
	strMailPath.TrimLeft();strMailPath.TrimRight();
	strUserId.TrimLeft();strUserId.TrimRight();
	if(strMailPath.IsEmpty()||strUserId.IsEmpty())
		return strReturn;

	if(strMailPath.GetAt(strMailPath.GetLength()-1)!='\\')
		strMailPath+='\\';
	strMailPath+=strUserId;
	strMailPath+='\\';
	strReturn=GetGUID();
	strMailPath+=strReturn;
	strMailPath+='\\';
	::CreateDirectory(strMailPath,NULL);
	strMailPath+=STR_DEFAULT_ATTACHMENT;
	strMailPath+='\\';
	::CreateDirectory(strMailPath,NULL);
	return strReturn;
}

STDMETHODIMP CSmtpModel::SendMailForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
										VARIANT vbSave,VARIANT bstMsgId,
										VARIANT* pErrorString)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	pErrorString->vt=VT_BSTR;
	CComBSTR bstError="";
	char* pMsgId;
	char* pMailPath;
	char* pUserId;
	BOOL bSave=FALSE;
	VARIANTTOBOOL(vbSave,bSave);
	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+='\\';
	if(!strMsgId.IsEmpty())
	{
		CString strAttachmentPath=strMailPath;
		strAttachmentPath+=strMsgId;
		strAttachmentPath+="\\";
		strAttachmentPath+=STR_DEFAULT_ATTACHMENT;
		strAttachmentPath+="\\";
		CString strAttachPathTemp=strAttachmentPath;
		strAttachmentPath+="*.*";
		WIN32_FIND_DATA tagFindData;
		HANDLE hResultTempTwo=FindFirstFile(strAttachmentPath,&tagFindData);
		while(TRUE)
		{
			BOOL bResult=::FindNextFile(hResultTempTwo,&tagFindData);
			if(!bResult)
			{
				FindClose(hResultTempTwo);
				break;
			}
			else if(tagFindData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
			{
				CString strFileName=tagFindData.cFileName;
				if(strFileName==".."||strFileName==".")
					continue;
				strFileName=strAttachPathTemp+strFileName;
				LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
				pAddrInfo->strStringAddr=strFileName;
				m_arrAttachment.AddTail(pAddrInfo);
			}
		}// End while								
	}
	LPTSTR pBody=W2T(m_bstrBody.m_str);
	CString strBody=pBody;
	strBody.Replace("\n","\n<br>");
	m_bstrBody=strBody;

	HRESULT hr=SendMail();
	if(FAILED(hr))
		bstError="发送邮件错误!";
	if(bSave)
	{
		::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
		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_SENDIDLIST;
		//Add message index to dst .ini file
		WriteMsgIdToIni(strIndexPath,strMsgId);
	}
	pErrorString->bstrVal=bstError.Detach();
	return S_OK;
}

STDMETHODIMP CSmtpModel::GetUserInfoForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
										   VARIANT *pTrueName, VARIANT *pGender, 
										   VARIANT *pBirth, VARIANT *pPersonalID, 
										   VARIANT *pMailBox, VARIANT *pCity, 
										   VARIANT *pEducation, VARIANT *pMaritalStatus, 
										   VARIANT *pJobType, VARIANT *pOccupation, 
										   VARIANT *pIncome, VARIANT *pNetCost, 
										   VARIANT *pEnquiry)
{
	// 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 strUserInfoPath=strMailPathTemp+STR_FILENAME_USERINFO;
	CString strContentTemp;
	GetContentFromTextFile(strUserInfoPath,&strContentTemp);
	CString strTrueName=GetValueByKeyFromBuf(strContentTemp,STR_KEY_TRUENAME);
	CString strGender=GetValueByKeyFromBuf(strContentTemp,STR_KEY_GENDER);
	CString strBirth=GetValueByKeyFromBuf(strContentTemp,STR_KEY_BIRTH);
	CString strPersonalID=GetValueByKeyFromBuf(strContentTemp,STR_KEY_PERSONALID);
	CString strMailBox=GetValueByKeyFromBuf(strContentTemp,STR_KEY_MAILBOX);
	CString strCity=GetValueByKeyFromBuf(strContentTemp,STR_KEY_CITY);
	CString strEducation=GetValueByKeyFromBuf(strContentTemp,STR_KEY_EDUCATION);
	CString strMaritalStatus=GetValueByKeyFromBuf(strContentTemp,STR_KEY_MARITALSTATUS);
	CString strJobType=GetValueByKeyFromBuf(strContentTemp,STR_KEY_JOBTYPE);
	CString strOccupation=GetValueByKeyFromBuf(strContentTemp,STR_KEY_OCCUPATION);
	CString strIncome=GetValueByKeyFromBuf(strContentTemp,STR_KEY_INCOME);
	CString strNetCost=GetValueByKeyFromBuf(strContentTemp,STR_KEY_NETCOST);
	CString strEnquiry=GetValueByKeyFromBuf(strContentTemp,STR_KEY_ENQUIRY);

	CComBSTR bstTemp=strTrueName;
	pTrueName->vt=VT_BSTR;
	pTrueName->bstrVal=bstTemp.Detach();

	bstTemp=strGender;
	pGender->vt=VT_BSTR;
	pGender->bstrVal=bstTemp.Detach();

	bstTemp=strBirth;
	pBirth->vt=VT_BSTR;
	pBirth->bstrVal=bstTemp.Detach();

	bstTemp=strPersonalID;
	pPersonalID->vt=VT_BSTR;
	pPersonalID->bstrVal=bstTemp.Detach();

	bstTemp=strMailBox;
	pMailBox->vt=VT_BSTR;
	pMailBox->bstrVal=bstTemp.Detach();

	bstTemp=strCity;
	pCity->vt=VT_BSTR;
	pCity->bstrVal=bstTemp.Detach();

	bstTemp=strEducation;
	pEducation->vt=VT_BSTR;
	pEducation->bstrVal=bstTemp.Detach();

	bstTemp=strMaritalStatus;
	pMaritalStatus->vt=VT_BSTR;
	pMaritalStatus->bstrVal=bstTemp.Detach();

	bstTemp=strJobType;
	pJobType->vt=VT_BSTR;
	pJobType->bstrVal=bstTemp.Detach();

	bstTemp=strOccupation;
	pOccupation->vt=VT_BSTR;
	pOccupation->bstrVal=bstTemp.Detach();

	bstTemp=strIncome;
	pIncome->vt=VT_BSTR;
	pIncome->bstrVal=bstTemp.Detach();

	bstTemp=strNetCost;
	pNetCost->vt=VT_BSTR;
	pNetCost->bstrVal=bstTemp.Detach();

	bstTemp=strEnquiry;
	pEnquiry->vt=VT_BSTR;
	pEnquiry->bstrVal=bstTemp.Detach();
	return S_OK;
}

STDMETHODIMP CSmtpModel::GetSysInfoForWeb(VARIANT bstMailPath, VARIANT bstUserId, 
										  VARIANT *pNickName, VARIANT *pNotWithOriMail, 
										  VARIANT *pMarkOriMsg, VARIANT *pSaveOutBox, 
										  VARIANT *pDelOption, VARIANT *pFullWarnRate,
										  VARIANT* pRecvDelInServer)
{
	// 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 strSysInfoPath=strMailPathTemp+STR_FILENAME_SYSINFO;
	CString strContentTemp;
	GetContentFromTextFile(strSysInfoPath,&strContentTemp);
	CString strNickName=GetValueByKeyFromBuf(strContentTemp,STR_KEY_NICKNAME);
	CString strNotWithOriMail=GetValueByKeyFromBuf(strContentTemp,STR_KEY_NOTWITHORIMAIL);
	CString strMarkOriMsg=GetValueByKeyFromBuf(strContentTemp,STR_KEY_MARKORIMSG);
	CString strSaveOutBox=GetValueByKeyFromBuf(strContentTemp,STR_KEY_SAVEOUTBOX);
	CString strDelOption=GetValueByKeyFromBuf(strContentTemp,STR_KEY_DELOPTION);
	CString strFullWarnRate=GetValueByKeyFromBuf(strContentTemp,STR_KEY_FULLWARNRATE);

⌨️ 快捷键说明

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