📄 peeperlib.cpp
字号:
if(nRet <= 0)
{
bRet = FALSE;
break ;
}
nSize = *((int*)(chData));
if(nSize <= 0)
{
bRet = FALSE;
break ;
}
int nWrite = 0;
while(nWrite < nSize)
{
nRet = sckClient.Receive(chFileData, PL_SOCKET_MAXBYTES);
if(nRet <= 0)
{
bRet = FALSE;
break ;
}
file.Write(chFileData, nRet);
nWrite += nRet;
if(hNotifyWnd != NULL)
{
int nProgress = (int)(((float)nWrite)*100.0f/((float)nSize));
::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
(WPARAM)nProgress, NULL);
}
bRet = TRUE;
}
}
else
{
nSize = file.GetLength();
int nRead = nSize;
ZeroMemory(chData, 10);
memcpy(chData, &nSize, sizeof(int));
int nRet = sckClient.Send(chData, sizeof(int));
if(nRet <= 0)
{
bRet = FALSE;
break ;
}
while(nRead > 0)
{
int n1 = min(nRead, PL_SOCKET_MAXBYTES);
int n2 = file.Read(chFileData, n1);
nRead -= n2;
nRet = sckClient.Send(chFileData, n2);
if(nRet <= 0)
{
bRet = FALSE;
break ;
}
if(hNotifyWnd != NULL)
{
int nProgress = (int)(((float)(nSize - nRead))*100.0f/((float)nSize));
::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
(WPARAM)nProgress, NULL);
}
bRet = TRUE;
}
}
delete []chFileData;
}while(0);
if(sckClient.m_hSocket != INVALID_SOCKET)
{
sckClient.Close();
}
if(sckServer.m_hSocket != INVALID_SOCKET)
{
sckServer.Close();
}
if(file.m_hFile != CFile::hFileNull)
{
file.Close();
}
return bRet;
}
BOOL WINAPI PL_DeleteFile(char *chFileName)
{
BOOL bRet = FALSE;
DWORD dwFlag = ::SetFileAttributes(chFileName, FILE_ATTRIBUTE_NORMAL);
if(dwFlag != 0xFFFFFFFF)
{
bRet = ::DeleteFile(chFileName);
}
return bRet;
}
BOOL WINAPI PL_MoveFile(char *chSrcFileName, char *chDesFileName)
{
BOOL bRet = FALSE;
DWORD dwFlag = ::SetFileAttributes(chSrcFileName, FILE_ATTRIBUTE_NORMAL);
if(dwFlag != 0xFFFFFFFF)
{
bRet = ::MoveFile(chSrcFileName, chDesFileName);
}
return bRet;
}
BOOL WINAPI PL_SendMail(CString strSMTP, CString strFrom,
CString strTo, CString strSubject, CString strBody)
{
BOOL bRet = FALSE;
CSocket sckSmtp;
if(sckSmtp.Create())
{
char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
SYSTEMTIME sm;
::GetLocalTime(&sm);
CString strDate;
// 日 月 年 时 分 秒
strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"),
sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100,
sm.wHour, sm.wMinute, sm.wSecond);
char chTemp[1024];
int nRet = -1;
if(sckSmtp.Connect(strSMTP, 25))
{
do
{
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//欢迎用户
TCHAR local_host[80];
ZeroMemory(local_host, 80*sizeof(TCHAR));
::gethostname(local_host, 80);
CString strUser = CString(local_host);
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "HELO %s\r\n", strUser);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//mail from
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//rcpt to
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//Data
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "DATA\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//信件内容
//时间
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Date: %s\r\n", strDate);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//From
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "From:%s\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//To
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "To:%s\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//CC
// ZeroMemory(chTemp, 1024);
// sprintf(chTemp, "CC:%s\r\n", strCC);
// sckSmtp.Send(chTemp, strlen(chTemp));
//Subject
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Subject:%s\r\n", strSubject);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//内容
int nLen = strBody.GetLength() + 5;
char *chBody = new char[nLen];
ZeroMemory(chBody, nLen);
sprintf(chBody, "%s\r\n", strBody);
nRet = sckSmtp.Send(chBody, strlen(chBody));
delete []chBody;
if(nRet < 0)
break ;
//结束
ZeroMemory(chTemp, 1024);
sprintf(chTemp, ".\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//退出
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "QUIT\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
bRet = TRUE;
}while(0);
}
sckSmtp.Close();
}
return bRet;
}
BOOL WINAPI PL_SendMail2(CString strSMTP, CString strFrom, CString strAuth,
CString strPass, CString strTo, CString strSubject,
CString strBody)
{
BOOL bRet = FALSE;
CSocket sckSmtp;
if(sckSmtp.Create())
{
char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
SYSTEMTIME sm;
::GetLocalTime(&sm);
CString strDate;
// 日 月 年 时 分 秒
strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"),
sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100,
sm.wHour, sm.wMinute, sm.wSecond);
char chTemp[1024];
int nRet = -1;
if(sckSmtp.Connect(strSMTP, 25))
{
do
{
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//欢迎用户
char local_host[80];
ZeroMemory(local_host, 80);
DWORD dwLen = 80;
GetUserName(local_host, &dwLen);
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "EHLO %s\r\n", local_host);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
// auto login
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "AUTH LOGIN\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
// verify user(Base64)
CBase64 cb;
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "%s\r\n", cb.Encode(strAuth.GetBuffer(0), strAuth.GetLength()));
strAuth.ReleaseBuffer();
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
// verify password
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "%s\r\n", cb.Encode(strPass.GetBuffer(0), strPass.GetLength()));
strPass.ReleaseBuffer();
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//mail from
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "MAIL FROM: <%s>\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//rcpt to
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "RCPT TO: <%s>\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//Data
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "DATA\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//信件内容
//时间
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Date: %s\r\n", strDate);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//From
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "From:%s\r\n", strFrom);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//To
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "To:%s\r\n", strTo);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//CC
// ZeroMemory(chTemp, 1024);
// sprintf(chTemp, "CC:%s\r\n", strCC);
// sckSmtp.Send(chTemp, strlen(chTemp));
//Subject
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "Subject:%s\r\n", strSubject);
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//内容
int nLen = strBody.GetLength() + 5;
char *chBody = new char[nLen];
ZeroMemory(chBody, nLen);
sprintf(chBody, "%s\r\n", strBody);
nRet = sckSmtp.Send(chBody, strlen(chBody));
delete []chBody;
if(nRet < 0)
break ;
//结束
ZeroMemory(chTemp, 1024);
sprintf(chTemp, ".\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
//接收信息
ZeroMemory(chTemp, 1024);
nRet = sckSmtp.Receive(chTemp, 1024);
if(nRet < 0)
break ;
if(strncmp(chTemp, "220", 3) != 0 &&
strncmp(chTemp, "250", 3) != 0 &&
strncmp(chTemp, "334", 3) != 0 &&
strncmp(chTemp, "235", 3) != 0 &&
strncmp(chTemp, "354", 3) != 0 &&
strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
break ;
//退出
ZeroMemory(chTemp, 1024);
sprintf(chTemp, "QUIT\r\n");
nRet = sckSmtp.Send(chTemp, strlen(chTemp));
if(nRet < 0)
break ;
bRet = TRUE;
}while(0);
}
sckSmtp.Close();
}
return bRet;
}
BOOL WINAPI PL_DetectInternetConnect(CString strHTTP)
{
BOOL bRet = FALSE;
HINTERNET hSession = NULL;
hSession = ::InternetOpen(_T("peeper"), PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);
if(hSession)
{
HINTERNET hHTTPSession = ::InternetOpenUrl(hSession,
strHTTP, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if(hHTTPSession)
{
bRet = TRUE;
::InternetCloseHandle(hHTTPSession);
}
::InternetCloseHandle(hSession);
}
return bRet;
}
HGLOBAL WINAPI PL_ReadDataFromFile(CString strFile)
{
HGLOBAL hData = NULL;
CFile file;
if(file.Open(strFile, CFile::modeRead))
{
int nLen = file.GetLength();
hData = ::GlobalAlloc(GHND, nLen);
if(hData != NULL)
{
LPVOID lpData = ::GlobalLock(hData);
file.ReadHuge(lpData, nLen);
GlobalUnlock(hData);
}
file.Close();
}
return hData;
}
BOOL WINAPI PL_WriteDataToFile(CString strFile, HGLOBAL hData)
{
BOOL bRet = FALSE;
CFile file;
if(file.Open(strFile, CFile::modeCreate | CFile::modeWrite))
{
if(hData != NULL)
{
int nLen = ::GlobalSize(hData);
LPVOID lpData = ::GlobalLock(hData);
file.WriteHuge(lpData, nLen);
GlobalUnlock(hData);
bRet = TRUE;
}
file.Close();
}
return bRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -