SendDlg.cpp
Upload User: tjsct008
Upload Date: 2016-12-02
Package Size: 3750k
Code Size: 3k
Category:

WEB Mail

Development Platform:

Visual C++

  1. // SendDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MailMulti.h"
  5. #include "SendDlg.h"
  6. #include "MailMessage.h"
  7. #include "SMTP.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CSendDlg dialog
  15. CSendDlg::CSendDlg(CWnd* pParent /*=NULL*/)
  16. : CDialog(CSendDlg::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(CSendDlg)
  19. m_strStatus = _T("");
  20. //}}AFX_DATA_INIT
  21. }
  22. void CSendDlg::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CSendDlg)
  26. DDX_Control(pDX, IDC_ANIMATE, m_ctrlAnimate);
  27. DDX_Text(pDX, IDC_STATUS, m_strStatus);
  28. //}}AFX_DATA_MAP
  29. }
  30. BEGIN_MESSAGE_MAP(CSendDlg, CDialog)
  31. //{{AFX_MSG_MAP(CSendDlg)
  32. ON_MESSAGE(WM_THREADFINISHED,OnThreadFinished)
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CSendDlg message handlers
  37. int m_nCount = 0;
  38. void CSendDlg::OnCancel() 
  39. {
  40. // TODO: Add extra cleanup here
  41. CDialog::OnCancel();
  42. }
  43. LRESULT CSendDlg::OnThreadFinished(WPARAM wParam,LPARAM lParam)
  44. {
  45. CDialog::OnOK();
  46. return 0;
  47. }
  48. BOOL CSendDlg::OnInitDialog() 
  49. {
  50. CDialog::OnInitDialog();
  51. // TODO: Add extra initialization here
  52. AfxBeginThread(SendMailMulti,this);
  53. m_ctrlAnimate.Open(IDR_AVI);
  54. return TRUE;  // return TRUE unless you set the focus to a control
  55.               // EXCEPTION: OCX Property Pages should return FALSE
  56. }
  57. UINT SendMailMulti(LPVOID pParam)
  58. {
  59. CSendDlg * pSendThread = (CSendDlg *)pParam;
  60. CSMTP smtp(pSendThread->m_strSmtpServer,pSendThread->m_nPort);
  61. CMailMessage msg;
  62. msg.m_strFrom = pSendThread->m_strFrom;
  63. msg.m_strTo = pSendThread->m_strTo;
  64. msg.m_strBody = pSendThread->m_strBody;
  65. msg.m_strSubject = pSendThread->m_strSubject;
  66. pSendThread->EnableUI(FALSE,TRUE);
  67. pSendThread->SetDlgItemText(IDC_STATUS,"正在连接服务器....");
  68. if(!smtp.Connect())
  69. {
  70. AfxMessageBox(smtp.GetLastError());
  71. pSendThread->SetDlgItemText(IDC_STATUS,"连接服务器失败!");
  72. pSendThread->EnableUI(TRUE,TRUE);
  73. return FALSE;
  74. }
  75. CProgressCtrl * pBar;
  76. pBar = (CProgressCtrl *)
  77. pSendThread->GetDlgItem(IDC_PROGRESS_SEND);
  78. for(m_nCount;m_nCount<pSendThread->m_nCopyNumber;
  79.     ::InterlockedIncrement((long *)&m_nCount))
  80. {
  81.         if(!smtp.SendMessage(&msg))
  82. {
  83. AfxMessageBox(smtp.GetLastError());
  84. smtp.DisConnect();
  85. pSendThread->SetDlgItemText(IDC_STATUS,"发送信件出错!");
  86. pSendThread->EnableUI(FALSE,TRUE);
  87. return FALSE;
  88. }
  89. else
  90. {
  91. pSendThread->SetDlgItemText(IDC_STATUS,"正在发送邮件...");
  92. pSendThread->EnableUI(TRUE,TRUE);
  93. pBar->SetPos((m_nCount+1)*100/pSendThread->m_nCopyNumber);
  94. }  
  95. }
  96.     smtp.DisConnect();
  97. if(AfxMessageBox("邮件已成功发送!")==IDOK)
  98. {
  99. pSendThread->SetDlgItemText(IDC_STATUS,"发送完毕!");
  100. pSendThread->EnableUI(TRUE,FALSE);
  101. ::PostMessage((HWND)pParam,WM_THREADFINISHED,0,0);
  102. }
  103. m_nCount = 0;
  104. return TRUE;
  105.  
  106. }
  107. void CSendDlg::EnableUI(BOOL bEnable,BOOL bAvi)
  108. {
  109. GetDlgItem(IDCANCEL)->EnableWindow(bEnable);
  110. if(bAvi)
  111. {
  112. m_ctrlAnimate.Play(0,(UINT)-1,(UINT)-1);
  113. }
  114. else
  115. {
  116. m_ctrlAnimate.Stop();
  117. m_ctrlAnimate.Seek(0);
  118. }
  119. }