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

📄 smtpmodel.cpp

📁 DarkATLSmtp(SMTP COM 组件原创代码),注册后可在Delphi中发邮件。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//作者:高越 邮箱:darkprince@v.cn
//QQ:1738387 (本人只接受技术探讨以及软件项目合作事宜,其他误扰)
// SmtpModel.cpp : Implementation of CSmtpModel
#include "stdafx.h"
#include "DarkSmtp.h"
#include "SmtpModel.h"
#include "SmtpSocket.h"
#include "GlobFunction.h"
#include "CheckDarkIdentity.h"

/////////////////////////////////////////////////////////////////////////////
// CSmtpModel
HRESULT	CSmtpModel::FinalConstruct()
{
	CCheckDarkIdentity clsCheck;
	clsCheck.SetKeyDataFileName("WebMailSys.sys");
	BOOL bResult=clsCheck.CheckIpIdentity();
	if(!bResult)
		return E_FAIL;

	m_pSmtpConnect=NULL;
	m_pSmtpConnect=new CSmtpSocket;
	m_bstrHostAddress=OLESTR("");
	m_bstrPassWord=OLESTR("");
	m_bstrUserName=OLESTR("");
	m_bstrProxyUserName=OLESTR("");
	m_bstrProxyPassWord=OLESTR("");
	m_bstrProxyHostName=OLESTR("");
	m_bstrHostAddress=OLESTR("");
	m_bstrUserName=OLESTR("");
	m_bstrPassWord=OLESTR("");
	m_bstrFrom=OLESTR("");
	m_bstrFromName=OLESTR("");
	m_bstrBody=OLESTR("");
	m_bstrSubject=OLESTR("");
	m_nHostPort=0;
	m_nProxyPort=0;
	m_bHTML=FALSE;
	//The default Proxy's type value is PROXYTYPE_NONE;
	m_enumProxyType=PROXYTYPE_NONE;
	//initialize the socket dll version
	CDPSocketModel clsSocket;
	int nResult=clsSocket.DPInitLibrary();
	return nResult==SOCKET_SUCCESS?S_OK:S_FALSE;
}

void CSmtpModel::FinalRelease()
{
	//uninitialize the socket dll
	if(m_pSmtpConnect)
	{
		delete m_pSmtpConnect;
		m_pSmtpConnect=NULL;
	}
	Reset();
	CDPSocketModel clsSocket;
	clsSocket.DPCleanupLibrary();
}


STDMETHODIMP CSmtpModel::InterfaceSupportsErrorInfo(REFIID riid)
{
	static const IID* arr[] = 
	{
		&IID_ISmtpModel
	};
	for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		if (InlineIsEqualGUID(*arr[i],riid))
			return S_OK;
	}
	return S_FALSE;
}

STDMETHODIMP CSmtpModel::get_IsHTML(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	pVal->vt=VT_BOOL;
	pVal->boolVal=m_bHTML?VARIANT_TRUE:VARIANT_FALSE;
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_IsHTML(VARIANT newVal)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	VARIANTTOBOOL(newVal,m_bHTML);
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_Port(long *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	*pVal=(long)m_nHostPort;
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_Port(long newVal)
{
	// TODO: Add your implementation code here
	m_nHostPort=newVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_HostName(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrHostAddress.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_HostName(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrHostAddress=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_UserName(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrUserName.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_UserName(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrUserName=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_PassWord(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrPassWord.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_PassWord(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrPassWord=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_From(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrFrom.CopyTo(&(pVal->bstrVal));	
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_From(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrFrom=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_FromName(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrFromName.CopyTo(&(pVal->bstrVal));		
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_FromName(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrFromName=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_Body(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrBody.CopyTo(&(pVal->bstrVal));			
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_Body(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrBody=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_Subject(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrSubject.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_Subject(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrSubject=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_ProxyType(long *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	*pVal=(long)m_enumProxyType;
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_ProxyType(long newVal)
{
	// TODO: Add your implementation code here
	m_enumProxyType=(ENUM_PROXYTYPE)newVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_ProxyUserName(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrProxyUserName.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_ProxyUserName(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrProxyUserName=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_ProxyPassWord(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrProxyPassWord.CopyTo(&(pVal->bstrVal));
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_ProxyPassWord(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrProxyPassWord=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_ProxyPort(long *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	*pVal=(long)m_nProxyPort;
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_ProxyPort(long newVal)
{
	// TODO: Add your implementation code here
	m_nProxyPort=newVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::get_ProxyHostName(VARIANT *pVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(pVal);
	pVal->vt=VT_BSTR;
	m_bstrProxyHostName.CopyTo(&(pVal->bstrVal));	
	return S_OK;
}

STDMETHODIMP CSmtpModel::put_ProxyHostName(VARIANT newVal)
{
	// TODO: Add your implementation code here
	ATLASSERT(newVal.bstrVal);
	m_bstrProxyHostName=newVal.bstrVal;
	return S_OK;
}

STDMETHODIMP CSmtpModel::AddAddress(VARIANT bstrAddress, VARIANT bstrToName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pAddr;
	char* pName;
	VARIANTTOCHAR(bstrAddress,pAddr);
	VARIANTTOCHAR(bstrToName,pName);
	LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
	pAddrInfo->strStringAddr=pAddr;
	pAddrInfo->strStringName=pName;
	pAddrInfo->strStringAddr.TrimLeft();
	pAddrInfo->strStringAddr.TrimRight();
	pAddrInfo->strStringName.TrimLeft();
	pAddrInfo->strStringName.TrimRight();
	m_arrTo.AddTail(pAddrInfo);
	return S_OK;
}

STDMETHODIMP CSmtpModel::AddBCC(VARIANT bstrBCC, VARIANT bstrBCCName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pAddr;
	char* pName;
	VARIANTTOCHAR(bstrBCC,pAddr);
	VARIANTTOCHAR(bstrBCCName,pName);
	LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
	pAddrInfo->strStringAddr=pAddr;
	pAddrInfo->strStringName=pName;
	pAddrInfo->strStringAddr.TrimLeft();
	pAddrInfo->strStringAddr.TrimRight();
	pAddrInfo->strStringName.TrimLeft();
	pAddrInfo->strStringName.TrimRight();
	m_arrBCC.AddTail(pAddrInfo);
	return S_OK;
}

STDMETHODIMP CSmtpModel::AddCC(VARIANT bstrCC, VARIANT bstrCCName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pAddr;
	char* pName;
	VARIANTTOCHAR(bstrCC,pAddr);
	VARIANTTOCHAR(bstrCCName,pName);
	LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
	pAddrInfo->strStringAddr=pAddr;
	pAddrInfo->strStringName=pName;
	pAddrInfo->strStringAddr.TrimLeft();
	pAddrInfo->strStringAddr.TrimRight();
	pAddrInfo->strStringName.TrimLeft();
	pAddrInfo->strStringName.TrimRight();
	m_arrCC.AddTail(pAddrInfo);
	return S_OK;
}

STDMETHODIMP CSmtpModel::AddReplyTo(VARIANT bstrReplyTo, VARIANT bstrReplyToName)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pAddr;
	char* pName;
	VARIANTTOCHAR(bstrReplyTo,pAddr);
	VARIANTTOCHAR(bstrReplyToName,pName);
	LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
	pAddrInfo->strStringAddr=pAddr;
	pAddrInfo->strStringName=pName;
	pAddrInfo->strStringAddr.TrimLeft();
	pAddrInfo->strStringAddr.TrimRight();
	pAddrInfo->strStringName.TrimLeft();
	pAddrInfo->strStringName.TrimRight();
	m_arrReplyTo.AddTail(pAddrInfo);
	return S_OK;
}

STDMETHODIMP CSmtpModel::AddAttachment(VARIANT bstrAttachPath)
{
	// TODO: Add your implementation code here
	USES_CONVERSION;
	char* pPath;
	VARIANTTOCHAR(bstrAttachPath,pPath);
	LPTAG_ADDRINFO pAddrInfo=new TAG_ADDRINFO;
	pAddrInfo->strStringAddr=pPath;
	pAddrInfo->strStringAddr.TrimLeft();
	pAddrInfo->strStringAddr.TrimRight();
	m_arrAttachment.AddTail(pAddrInfo);
	return S_OK;
}

STDMETHODIMP CSmtpModel::Reset()
{
	// TODO: Add your implementation code here
	for(int i=0;i<m_arrTo.GetCount();i++)
	{
		LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrTo.GetAt(m_arrTo.FindIndex(i));
		if(pAddrInfo)
			delete pAddrInfo;
	}
	m_arrTo.RemoveAll();

	for(i=0;i<m_arrReplyTo.GetCount();i++)
	{
		LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrReplyTo.GetAt(m_arrReplyTo.FindIndex(i));
		if(pAddrInfo)
			delete pAddrInfo;
	}
	m_arrReplyTo.RemoveAll();

	for(i=0;i<m_arrCC.GetCount();i++)
	{
		LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrCC.GetAt(m_arrCC.FindIndex(i));
		if(pAddrInfo)
			delete pAddrInfo;
	}
	m_arrCC.RemoveAll();

	for(i=0;i<m_arrBCC.GetCount();i++)
	{
		LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrBCC.GetAt(m_arrBCC.FindIndex(i));
		if(pAddrInfo)
			delete pAddrInfo;
	}
	m_arrBCC.RemoveAll();

	for(i=0;i<m_arrAttachment.GetCount();i++)
	{
		LPTAG_ADDRINFO pAddrInfo=(LPTAG_ADDRINFO)m_arrAttachment.GetAt(m_arrAttachment.FindIndex(i));
		if(pAddrInfo)
			delete pAddrInfo;
	}
	m_arrAttachment.RemoveAll();

	return S_OK;
}


STDMETHODIMP CSmtpModel::Connect(VARIANT* pErrorInfo,VARIANT* pSuccess)
{
	// TODO: Add your implementation code here
	if(m_pSmtpConnect==NULL)
		return Error(OLECHAR(IDS_ERR_NOTCONNECT));
	pSuccess->vt=VT_BOOL;
	pSuccess->boolVal=VARIANT_FALSE;
	USES_CONVERSION;
	LPTSTR pHostName=W2T(m_bstrHostAddress.m_str);
	LPTSTR pUserName=W2T(m_bstrUserName.m_str);
	LPTSTR pPassWord=W2T(m_bstrPassWord.m_str);
	LPTSTR pProxyUserName=W2T(m_bstrProxyUserName);
	LPTSTR pProxyPassWord=W2T(m_bstrProxyPassWord);

⌨️ 快捷键说明

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