#include #include #include #include #include #include #include #include MailDlg::MailDlg(void) { mInitHandler.setCallback(this,&MailDlg::initHandler); mDestroyHandler.setCallback(this,&MailDlg::destroyHandler); mCommandHandler.setCallback(this,&MailDlg::commandHandler); mCloseHandler.setCallback(this,&MailDlg::closeHandler); mDlgCodeHandler.setCallback(this,&MailDlg::dlgCodeHandler); mOpenHandler.setCallback(this,&MailDlg::openHandler); mPreOpenHandler.setCallback(this,&MailDlg::preOpenHandler); DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); DWindow::insertHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); SMTPThread::insertHandler(&mOpenHandler,SMTPThread::MsgOpen); SMTPThread::insertHandler(&mPreOpenHandler,SMTPThread::MsgPreOpen); } MailDlg::~MailDlg() { DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); DWindow::removeHandler(VectorHandler::DialogCodeHandler,&mDlgCodeHandler); SMTPThread::removeHandler(SMTPThread::MsgOpen); SMTPThread::removeHandler(SMTPThread::MsgPreOpen); } MailDlg &MailDlg::operator=(const MailDlg &/*someMailDlg*/) { // private implementation return *this; } BOOL MailDlg::perform(const String &strCommandLine) { if(!strCommandLine.isNull())mCommandLine=strCommandLine; return ::DialogBoxParam(processInstance(),(LPSTR)"Mail",(HWND)0,DWindow::DlgProc,(LPARAM)(DWindow*)this); } CallbackData::ReturnType MailDlg::initHandler(CallbackData &/*someCallbackData*/) { ::SetClassLong(*this,GCL_HICON,(long)(HICON)::LoadIcon(processInstance(),"MAIL")); mStatusBar=new StatusBar(*this); mStatusBar.disposition(PointerDisposition::Delete); initializeRecipients(); initializeReversePaths(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MailDlg::destroyHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MailDlg::dlgCodeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)DLGC_WANTARROWS|DLGC_WANTCHARS; } CallbackData::ReturnType MailDlg::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case IDOK : if(getFields())open(mMailInfo.server()); break; case IDCANCEL : endDialog(FALSE); break; case MailServer : handleMailServer(); break; case MailTo : handleMailTo(someCallbackData); break; case MailFrom : handleMailFrom(someCallbackData); break; case MailAttach : handleMailAttach(); break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType MailDlg::closeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } DWORD MailDlg::preOpenHandler(ThreadMessage &someThreadMessage) { enableControls(FALSE); return FALSE; } DWORD MailDlg::openHandler(ThreadMessage &someThreadMessage) { if(!someThreadMessage.userDataOne()) { enableControls(TRUE); return TRUE; } sendMail(); enableControls(TRUE); return FALSE; } void MailDlg::handleMailTo(CallbackData &someCallbackData) { if(CBN_KILLFOCUS!=someCallbackData.wmCommandCommand())return; MailReg mailReg; String comboText; getText(MailTo,comboText); mailReg.addRecipient(comboText); } void MailDlg::handleMailFrom(CallbackData &someCallbackData) { if(CBN_KILLFOCUS!=someCallbackData.wmCommandCommand())return; MailReg mailReg; String comboText; getText(MailFrom,comboText); mailReg.addReversePath(comboText); } void MailDlg::handleMailServer(void) { String serverName; ServerDialog serverDialog(*this); serverDialog.performDialog(serverName); } void MailDlg::handleMailAttach(void) { OpenDialog openFile; String pathFileName; UUEncode uuEncode; if(!openFile.getOpenFileName(*this,"*.*","Open File","",pathFileName))return; if(!uuEncode.encode(*this,pathFileName,mAttachment,FALSE)) mStatusBar->setText(pathFileName+String(" is not attached.")); else mStatusBar->setText(pathFileName+String(" is attached.")); } BOOL MailDlg::getFields(void) { String workString; DWORD lineCount; getText(MailFrom,workString); mMailInfo.reversePath(workString); getText(MailTo,workString); mMailInfo.toField(workString); getText(MailSubject,workString); mMailInfo.subjectField(workString); lineCount=DWindow::sendMessage(MailText,EM_GETLINECOUNT,0,0L); mMailInfo.mailData().remove(); for(int itemIndex=0;itemIndex mailData; Block recipients; String headerString; String strDomain; if(regKey.openKey(String(STRING_DOMAINNAMEKEYNAME)))regKey.queryValue(String(STRING_DOMAINNAMEKEYENTRY),strDomain); if(strDomain.isNull())strDomain=String(STRING_LOCALHOST); if(!helo(strDomain))return; if(!mail(mMailInfo.reversePath()))return; mMailInfo.recipients(recipients); for(int rcptIndex=0;rcptIndex"):mMailInfo.subjectField()); mailData.insert(&headerString); SystemTime systemTime; headerString=String(STRING_DATE)+systemTime.toString(); mailData.insert(&headerString); for(int lineIndex=0;lineIndexsetText(STRING_MAILSENT); clearEditControl(); } void MailDlg::initializeRecipients(void) { MailReg mailReg; Block strBlock; if(!mCommandLine.isNull())DWindow::sendMessage(MailTo,CB_INSERTSTRING,-1,(LPARAM)(LPSTR)mCommandLine); mailReg.getRecipients(strBlock); for(int itemIndex=0;itemIndex strBlock; mailReg.getReversePaths(strBlock); for(int itemIndex=0;itemIndexsetText(messageString); } void MailDlg::message(Block &messageStrings) { if(!mStatusBar.isOkay())return; for(int lineIndex=0;lineIndexsetText(messageStrings[lineIndex]); }