436 lines
16 KiB
Plaintext
436 lines
16 KiB
Plaintext
|
|
// BOOL helo(const String &domainName);
|
|
// BOOL mail(const String &reversePath);
|
|
// BOOL rcpt(const String &forwardPath);
|
|
// BOOL data(const Block<String> &mailData);
|
|
// BOOL verify(const String &forwardPath);
|
|
// BOOL expand(const String &mailList);
|
|
// BOOL send(const String &reversePath);
|
|
// BOOL sendOrMail(const String &reversePath);
|
|
// BOOL sendAndMail(const String &reversePath);
|
|
// BOOL help(const String &commandName=String());
|
|
// BOOL noop(void);
|
|
// BOOL reset(void);
|
|
// BOOL turn(void);
|
|
// BOOL quit(void);
|
|
|
|
BOOL SMTPClient::helo(const String &domainName)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||domainName.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Helo];
|
|
controlData+=mSpace;
|
|
controlData+=domainName;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelo))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::quit(void)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Quit];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckQuit))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::mail(const String &reversePath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Mail];
|
|
controlData+=mSpace;
|
|
controlData+=mSMTPCmds[From];
|
|
controlData+=reversePath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckMail))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::rcpt(const String &forwardPath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Recipient];
|
|
controlData+=mSpace;
|
|
controlData+=mSMTPCmds[To];
|
|
controlData+=forwardPath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckRecipient))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::data(const Block<String> &mailData)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||!mailData.size())return FALSE;
|
|
controlData=mSMTPCmds[Data];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE;
|
|
for(int lineIndex=0;lineIndex<mailData.size();lineIndex++)mSMTPControl.send(((Block<String>&)mailData)[lineIndex]);
|
|
mSMTPControl.send(".");
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckData))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::verify(const String &forwardPath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||forwardPath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Verify];
|
|
controlData+=mSpace;
|
|
controlData+=forwardPath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckVerify))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::expand(const String &mailList)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||mailList.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Verify];
|
|
controlData+=mSpace;
|
|
controlData+=mailList;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckExpand))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::send(const String &reversePath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[Send];
|
|
controlData+=mSpace;
|
|
controlData+=mSMTPCmds[From];
|
|
controlData+=reversePath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSend))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::sendOrMail(const String &reversePath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[SendOrMail];
|
|
controlData+=mSpace;
|
|
controlData+=mSMTPCmds[From];
|
|
controlData+=reversePath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendOrMail))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::sendAndMail(const String &reversePath)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected()||reversePath.isNull())return FALSE;
|
|
controlData=mSMTPCmds[SendAndMail];
|
|
controlData+=mSpace;
|
|
controlData+=mSMTPCmds[From];
|
|
controlData+=reversePath;
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckSendAndMail))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::reset(void)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Reset];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckReset))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::help(const String &commandName)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Help];
|
|
if(!commandName.isNull())
|
|
{
|
|
controlData+=mSpace;
|
|
controlData+=commandName;
|
|
}
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckHelp))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::noop(void)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Noop];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckNoop))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SMTPClient::turn(void)
|
|
{
|
|
String controlData;
|
|
Block<String> responseLines;
|
|
|
|
if(!mSMTPControl.isConnected())return FALSE;
|
|
controlData=mSMTPCmds[Turn];
|
|
if(!putControlData(controlData,FALSE))return FALSE;
|
|
if(!mSMTPControl.receive(responseLines))return FALSE;
|
|
message(responseLines);
|
|
if(!responseLines.size()||!isInResponse(responseLines.size()>1?responseLines[0].betweenString(0,'-'):responseLines[0].betweenString(0,' '),SMTPResponse::AckTurn))return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
// BOOL isInResponse(const String &responseString,SMTPResponse::RspType responseType);
|
|
//inline
|
|
//BOOL SMTPClient::isInResponse(const String &responseString,SMTPResponse::RspType responseType)
|
|
//{
|
|
// return mSMTPResponse.isInResponse(responseString,responseType);
|
|
//}
|
|
|
|
|
|
|
|
|
|
void POPDlg::retrieveMail(void)
|
|
{
|
|
POPClient popClient;
|
|
ServerReg serverReg;
|
|
WORD messages;
|
|
WORD octets;
|
|
|
|
mMailBlock.remove();
|
|
if(!handleLoginParams(serverReg))return;
|
|
if(!popClient.open(serverReg.serverName()))return;
|
|
if(!popClient.authenticate(serverReg.userName(),serverReg.password()))
|
|
{
|
|
popClient.quit();
|
|
popClient.close();
|
|
return;
|
|
}
|
|
popClient.stat(messages,octets);
|
|
if(!messages)::MessageBox(*this,(LPSTR)"No Messages On Server",(LPSTR)"MAIL",MB_OK);
|
|
// sendMessage(ListBox,WM_SETREDRAW,FALSE,0L);
|
|
// sendMessage(ListBox,LB_RESETCONTENT,0,0L);
|
|
for(int msgIndex=1;msgIndex<=messages;msgIndex++)
|
|
{
|
|
mMailBlock.insert(&Block<String>());
|
|
Block<String> &msgLines=mMailBlock[mMailBlock.size()-1];
|
|
popClient.retrieve(msgIndex,msgLines);
|
|
if(!msgLines.size())continue;
|
|
// for(int msgLine=0;msgLine<msgLines.size();msgLine++)
|
|
// {
|
|
// if(msgLines[msgLine].strstr("From:"))sendMessage(ListBox,LB_ADDSTRING,0,(LPARAM)(LPSTR)msgLines[msgLine]);
|
|
// }
|
|
// popClient.top(msgLines,msgIndex);
|
|
// if(!msgLines.size())continue;
|
|
// for(int msgLine=0;msgLine<msgLines.size();msgLine++)
|
|
// {
|
|
// if(msgLines[msgLine].strstr("From:"))sendMessage(ListBox,LB_ADDSTRING,0,(LPARAM)(LPSTR)msgLines[msgLine]);
|
|
// }
|
|
}
|
|
// sendMessage(ListBox,WM_SETREDRAW,TRUE,0L);
|
|
// for(int msgIndex=1;msgIndex<=messages;msgIndex++)popClient.retrieve(msgIndex,msgLines);
|
|
popClient.quit();
|
|
popClient.close();
|
|
}
|
|
|
|
|
|
CallbackData::ReturnType POPDlg::mouseMoveHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(!mIsInDrag)return (CallbackData::ReturnType)FALSE;
|
|
PureDevice displayDevice(*this);
|
|
mDragSprite.setDevice(displayDevice);
|
|
mDragSprite.moveSprite(Point(someCallbackData.loWord(),someCallbackData.hiWord()));
|
|
|
|
// if(!mImageList.dragMove(GDIPoint(someCallbackData.loWord(),someCallbackData.hiWord())))::OutputDebugString("DragMove Failed\n");
|
|
// if(!ImageList_DragMove(someCallbackData.loWord(),someCallbackData.hiWord()))::OutputDebugString("ImageList_DragMove failed\n");
|
|
// ::OutputDebugString("MouseMove\n");
|
|
// PureDevice displayDevice(*this);
|
|
// Point cursorPoint(someCallbackData.loWord(),someCallbackData.hiWord());
|
|
// cursorPoint.x(cursorPoint.x()-mRelPoint.x());
|
|
// cursorPoint.y(cursorPoint.y()-mRelPoint.y());
|
|
|
|
// cursorPoint.x(mItemRect.left());
|
|
// cursorPoint.y(mItemRect.top());
|
|
|
|
|
|
// mImageList.drawImage(displayDevice,cursorPoint,0,ImageList::DrawOverlayMask);
|
|
// enum DrawFlag{DrawNormal=ILD_NORMAL,DrawTransparent=ILD_TRANSPARENT,DrawMask=ILD_MASK,
|
|
// DrawImage=ILD_IMAGE,DrawBlend25=ILD_BLEND25,DrawBlend50=ILD_BLEND50,
|
|
// DrawOverlayMask=ILD_OVERLAYMASK};
|
|
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType POPDlg::leftButtonUpHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
if(!mIsInDrag)return (CallbackData::ReturnType)FALSE;
|
|
// mImageList.endDrag();
|
|
// ImageList_EndDrag();
|
|
::ReleaseCapture();
|
|
::ShowCursor(TRUE);
|
|
mIsInDrag=FALSE;
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
#include <pop/drgsprt.hpp>
|
|
CallbackData::ReturnType POPDlg::mailBeginDragHandler(CallbackData &someCallbackData)
|
|
{
|
|
mIsInDrag=TRUE;
|
|
TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam());
|
|
mImageList=mMailTree->createDragImage(treeViewMessageHeader.itemNew().item());
|
|
|
|
PureDevice displayDevice(*this);
|
|
ImageInfo imageInfo;
|
|
mImageList.imageInfo(0,imageInfo);
|
|
mDragSprite.setDevice(displayDevice);
|
|
mDragSprite.setBitmap(imageInfo.colorBitmap());
|
|
//DragSprite dragSprite(imageInfo.colorBitmap());
|
|
// dragSprite.moveSprite(treeViewMessageHeader.pointDrag());
|
|
Point movePoint(treeViewMessageHeader.pointDrag().x(),treeViewMessageHeader.pointDrag().y());
|
|
mDragSprite.moveSprite(movePoint);
|
|
|
|
// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE);
|
|
// GDIPoint pointDrag(treeViewMessageHeader.pointDrag());
|
|
// GDIPoint cursorPos;
|
|
// ::GetCursorPos(&((POINT&)cursorPos));
|
|
// pointDrag.x(cursorPos.x());
|
|
// pointDrag.y(cursorPos.y());
|
|
// ImageList_DragEnter(NULL,pointDrag.x(),pointDrag.y());
|
|
// if(!mImageList.beginDrag(0,pointDrag))::OutputDebugString("BeginDrag Failed.\n");
|
|
// if(!mImageList.beginDrag(0,GDIPoint()))::OutputDebugString("BeginDrag Failed.\n");
|
|
::ShowCursor(FALSE);
|
|
::SetCapture(*this);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
|
|
|
|
// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE);
|
|
// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE);
|
|
// GDIPoint pointDrag(treeViewMessageHeader.pointDrag());
|
|
// GDIPoint cursorPos;
|
|
// ::GetCursorPos(&((POINT&)cursorPos));
|
|
// pointDrag.x(cursorPos.x());
|
|
// pointDrag.y(cursorPos.y());
|
|
// ImageList_DragEnter(NULL,pointDrag.x(),pointDrag.y());
|
|
// if(!mImageList.beginDrag(0,pointDrag))::OutputDebugString("BeginDrag Failed.\n");
|
|
// if(!mImageList.beginDrag(0,GDIPoint()))::OutputDebugString("BeginDrag Failed.\n");
|
|
|
|
|
|
#if 0
|
|
ImageInfo imageInfo;
|
|
mImageList.imageInfo(0,imageInfo);
|
|
mDragSprite.setDevice(displayDevice);
|
|
mDragSprite.setBitmap(imageInfo.colorBitmap());
|
|
mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),TRUE);
|
|
Point movePoint(mItemRect.left(),mItemRect.top());
|
|
mDragSprite.moveSprite(movePoint);
|
|
#endif
|
|
|
|
|
|
#if 0
|
|
PureDevice displayDevice(*this);
|
|
PureDevice memDevice(displayDevice);
|
|
PureBitmap pureBitmap(imageInfo.colorBitmap());
|
|
PureBitmap pureList(processInstance(),"LIST");
|
|
PureBitmap pureBitmap(pureList);
|
|
memDevice.select((GDIObj)pureBitmap);
|
|
Rect dstRect(0,0,pureBitmap.width(),pureBitmap.height());
|
|
Point srcPoint(0,0);
|
|
if(!displayDevice.bitBlt(dstRect,memDevice,srcPoint))::OutputDebugString("BitBlt failed/n");
|
|
#endif
|
|
|
|
// BITMAP bmBitmap;
|
|
// memDevice.select(imageInfo.colorBitmap());
|
|
// ::GetObject(imageInfo.maskBitmap(),sizeof(BITMAP),(LPSTR)&bmBitmap);
|
|
// Rect dstRect(0,0,bmBitmap.bmWidthBytes,bmBitmap.bmHeight);
|
|
// Rect dstRect(0,0,pureBitmap.widthBytes(),pureBitmap.height());
|
|
|
|
// BITMAP bm;
|
|
// HDC hDC=::GetDC(*this);
|
|
// HDC hMemDC=::CreateCompatibleDC(hDC);
|
|
// HBITMAP hBitmap(imageInfo.colorBitmap());
|
|
// PureBitmap hBitmap(processInstance(),"LIST");
|
|
// ::GetObject(hBitmap,sizeof(BITMAP),(LPSTR)&bm);
|
|
// ::SelectObject(hMemDC,hBitmap);
|
|
// ::BitBlt(hDC,0,0,bm.bmWidth,bm.bmHeight,hMemDC,0,0,SRCCOPY);
|
|
// ::BitBlt(hDC,0,0,hBitmap.width(),hBitmap.height(),hMemDC,0,0,SRCCOPY);
|
|
// ::ReleaseDC(*this,hDC);
|
|
// ::DeleteDC(hMemDC);
|
|
|
|
|
|
// if(!mBitmapScratch.isOkay())mBitmapScratch=new PureBitmap();
|
|
// mMailTree->getItemRect(mItemRect,treeViewMessageHeader.itemNew().item(),FALSE);
|
|
// mImageList.imageInfo(0,imageInfo);
|
|
// mImageList.drawImage(pureDevice,Point(),0);
|
|
|
|
|
|
#if 0
|
|
TreeViewMessageHeader &treeViewMessageHeader=*((TreeViewMessageHeader*)someCallbackData.lParam());
|
|
NM_TREEVIEW *pNMHeader=(NM_TREEVIEW*)&treeViewMessageHeader;
|
|
#endif
|