📄 smtpmodel.cpp
字号:
//作者:高越 邮箱: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 + -