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

📄 senddlg.cpp

📁 一个批量发送电子邮件的程序
💻 CPP
字号:
// SendDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MailMulti.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
}


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_MESSAGE(WM_THREADFINISHED,OnThreadFinished)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSendDlg message handlers
int m_nCount = 0;
void CSendDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}
LRESULT CSendDlg::OnThreadFinished(WPARAM wParam,LPARAM lParam)
{
	CDialog::OnOK();
	return 0;
}

BOOL CSendDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	AfxBeginThread(SendMailMulti,this);
	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 SendMailMulti(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_strBody = pSendThread->m_strBody;
	msg.m_strSubject = pSendThread->m_strSubject;
	pSendThread->EnableUI(FALSE,TRUE);
	pSendThread->SetDlgItemText(IDC_STATUS,"正在连接服务器....");

	if(!smtp.Connect())
	{
		AfxMessageBox(smtp.GetLastError());
		pSendThread->SetDlgItemText(IDC_STATUS,"连接服务器失败!");
		pSendThread->EnableUI(TRUE,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(FALSE,TRUE);
			return FALSE;
		}
		else
		{
			pSendThread->SetDlgItemText(IDC_STATUS,"正在发送邮件...");
			pSendThread->EnableUI(TRUE,TRUE);
			pBar->SetPos((m_nCount+1)*100/pSendThread->m_nCopyNumber);
		}			 
	}
    smtp.DisConnect();
	if(AfxMessageBox("邮件已成功发送!")==IDOK)
	{
		pSendThread->SetDlgItemText(IDC_STATUS,"发送完毕!");
		pSendThread->EnableUI(TRUE,FALSE);
		::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0);
	}
	m_nCount = 0;
	return TRUE;
					 
}
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 + -