📄 smtpmodel.cpp
字号:
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( <ime );
today = localtime( <ime );
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 + -