POP3SMTPDlg.cpp
上传用户:pyhyhg
上传日期:2022-08-11
资源大小:56k
文件大小:7k
源码类别:

Email客户端

开发平台:

Visual C++

  1. // POP3SMTPDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "POP3SMTP.h"
  5. #include "POP3SMTPDlg.h"
  6. //smtp
  7. #include "SMTP.h"
  8. #include "MailMessage.h"
  9. //pop
  10. #include "pop3.h"
  11. #include "Pop3Base4.h"
  12. #include "Choose.h"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. // CPOP3SMTPDlg dialog
  20. CPOP3SMTPDlg::CPOP3SMTPDlg(CWnd* pParent /*=NULL*/)
  21. : CDialog(CPOP3SMTPDlg::IDD, pParent)
  22. {
  23. //{{AFX_DATA_INIT(CPOP3SMTPDlg)
  24. m_popserver = _T("pop3.sohu.com");
  25. m_pass = _T("870422");
  26. m_user = _T("testemail2008");
  27. m_smtpserver = _T("smtp.sohu.com");
  28. m_sub = _T("这是测试信件!");
  29. m_to = _T("testemail2009@sohu.com");
  30. m_body = _T("Hello,world!");
  31. m_info = _T("");
  32. m_del = FALSE;
  33. //}}AFX_DATA_INIT
  34. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  35. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  36. }
  37. void CPOP3SMTPDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CPOP3SMTPDlg)
  41. DDX_Text(pDX, IDC_EDIT_POP, m_popserver);
  42. DDV_MaxChars(pDX, m_popserver, 256);
  43. DDX_Text(pDX, IDC_EDIT_PASS, m_pass);
  44. DDV_MaxChars(pDX, m_pass, 256);
  45. DDX_Text(pDX, IDC_EDIT_USER, m_user);
  46. DDV_MaxChars(pDX, m_user, 256);
  47. DDX_Text(pDX, IDC_EDIT_SMTP, m_smtpserver);
  48. DDX_Text(pDX, IDC_EDIT_SUB, m_sub);
  49. DDX_Text(pDX, IDC_EDIT_TO, m_to);
  50. DDX_Text(pDX, IDC_EDIT_BODY, m_body);
  51. DDX_Text(pDX, IDC_EDIT_INFO, m_info);
  52. DDX_Check(pDX, IDC_CHECK_DEL, m_del);
  53. //}}AFX_DATA_MAP
  54. }
  55. BEGIN_MESSAGE_MAP(CPOP3SMTPDlg, CDialog)
  56. //{{AFX_MSG_MAP(CPOP3SMTPDlg)
  57. ON_WM_SYSCOMMAND()
  58. ON_WM_PAINT()
  59. ON_WM_QUERYDRAGICON()
  60. ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
  61. ON_BN_CLICKED(IDC_BUTTON_RECV, OnButtonRecv)
  62. ON_BN_CLICKED(IDC_BUTTON_DISCON, OnButtonDiscon)
  63. ON_BN_CLICKED(IDC_BUTTON_VIEW, OnButtonView)
  64. //}}AFX_MSG_MAP
  65. END_MESSAGE_MAP()
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CPOP3SMTPDlg message handlers
  68. BOOL CPOP3SMTPDlg::OnInitDialog()
  69. {
  70. CDialog::OnInitDialog();
  71. // Add "About..." menu item to system menu.
  72. // IDM_ABOUTBOX must be in the system command range.
  73. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  74. ASSERT(IDM_ABOUTBOX < 0xF000);
  75. CMenu* pSysMenu = GetSystemMenu(FALSE);
  76. if (pSysMenu != NULL)
  77. {
  78. CString strAboutMenu;
  79. strAboutMenu.LoadString(IDS_ABOUTBOX);
  80. if (!strAboutMenu.IsEmpty())
  81. {
  82. pSysMenu->AppendMenu(MF_SEPARATOR);
  83. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  84. }
  85. }
  86. // Set the icon for this dialog.  The framework does this automatically
  87. //  when the application's main window is not a dialog
  88. SetIcon(m_hIcon, TRUE); // Set big icon
  89. SetIcon(m_hIcon, FALSE); // Set small icon
  90. // TODO: Add extra initialization here
  91. CHARFORMAT cf;
  92. cf.cbSize=sizeof(cf);
  93. cf.dwMask=CFM_COLOR | CFM_FACE;
  94. cf.dwEffects=0;
  95. cf.crTextColor=RGB(255,0,0);
  96. strcpy(cf.szFaceName,"Verdana");
  97. CRichEditCtrl* re=(CRichEditCtrl*)GetDlgItem(IDC_EDIT_INFO);
  98. re->SetDefaultCharFormat(cf);
  99. return TRUE;  // return TRUE  unless you set the focus to a control
  100. }
  101. // If you add a minimize button to your dialog, you will need the code below
  102. //  to draw the icon.  For MFC applications using the document/view model,
  103. //  this is automatically done for you by the framework.
  104. void CPOP3SMTPDlg::OnPaint() 
  105. {
  106. if (IsIconic())
  107. {
  108. CPaintDC dc(this); // device context for painting
  109. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  110. // Center icon in client rectangle
  111. int cxIcon = GetSystemMetrics(SM_CXICON);
  112. int cyIcon = GetSystemMetrics(SM_CYICON);
  113. CRect rect;
  114. GetClientRect(&rect);
  115. int x = (rect.Width() - cxIcon + 1) / 2;
  116. int y = (rect.Height() - cyIcon + 1) / 2;
  117. // Draw the icon
  118. dc.DrawIcon(x, y, m_hIcon);
  119. }
  120. else
  121. {
  122. CDialog::OnPaint();
  123. }
  124. }
  125. // The system calls this to obtain the cursor to display while the user drags
  126. //  the minimized window.
  127. HCURSOR CPOP3SMTPDlg::OnQueryDragIcon()
  128. {
  129. return (HCURSOR) m_hIcon;
  130. }
  131. void CPOP3SMTPDlg::OnButtonSend() 
  132. {
  133. // TODO: Add your control notification handler code here
  134. // TODO: Add your control notification handler code here
  135. UpdateData( TRUE );
  136. CSMTP smtp( m_popserver );
  137. CMailMessage msg;
  138. msg.m_sFrom = m_user+"@sohu.com";
  139. msg.AddMultipleRecipients( m_to );
  140. msg.m_sSubject = m_sub;
  141. msg.m_sBody = m_body;
  142. if( !smtp.Connect() )
  143. {
  144. AfxMessageBox( smtp.GetLastError() );
  145. return;
  146. }
  147. if( !smtp.SendMessage( &msg ) )
  148. {
  149. AfxMessageBox( smtp.GetLastError() );
  150. return;
  151. }
  152. if( !smtp.Disconnect() )
  153. {
  154. AfxMessageBox( smtp.GetLastError() );
  155. return;
  156. }
  157. AfxMessageBox( _T( "信件成功发送!") );
  158. }
  159. void CPOP3SMTPDlg::OnButtonRecv() 
  160. {
  161. // TODO: Add your control notification handler code here
  162. pop3.Set(this); //set window that would receive messages
  163. UpdateData(TRUE);
  164. m_info="";
  165. pop3.SetProp(m_user,m_pass); //set user and pass
  166. pop3.DelAfterRead(m_del);
  167. pop3.Create();
  168. pop3.Connect((LPCSTR)m_popserver,110); // to a server
  169. UpdateData(FALSE);
  170. }
  171. void CPOP3SMTPDlg::OnButtonDiscon() 
  172. {
  173. // TODO: Add your control notification handler code here
  174. pop3.Close();
  175. }
  176. void CPOP3SMTPDlg::Dispatch(LONG param)
  177. {
  178. CString s;
  179. switch(param)
  180. {
  181. case S_CONNECT: //we are ed
  182. m_info+="已经连接到服务器:"+m_popserver;
  183. m_info+="...rn";
  184. GetDlgItem(IDC_BUTTON_RECV)->EnableWindow(FALSE);
  185. GetDlgItem(IDC_BUTTON_DISCON)->EnableWindow(TRUE);
  186. GetDlgItem(IDC_BUTTON_VIEW)->EnableWindow(FALSE);
  187. break;
  188. //case S_NOTCON:
  189. // info+="无法连接到服务器:"+server;
  190. // info+="...rn";
  191. // break;
  192. case S_RECEIVE: //we are receiving some data
  193. pop3.GetLastMsg(s);
  194. m_info+=s;
  195. break; 
  196. case S_CLOSE: //we are closing ion
  197. m_info+=pop3.GetError();
  198. m_info+="断开连接rn";
  199. GetDlgItem(IDC_BUTTON_RECV)->EnableWindow(TRUE);
  200. GetDlgItem(IDC_BUTTON_DISCON)->EnableWindow(FALSE);
  201. break;
  202. case S_GETNUMMSGS: //we can get number of messages
  203. {
  204. s.Format("共收到 %d 封信rn",pop3.GetNumMsg());
  205. m_info+=s;
  206. break;
  207. }
  208. case S_GETSIZEMSGS: //now size of messages
  209. {
  210. s.Format("大小为: %d (bytes)rn",pop3.GetSizeMsg());
  211. m_info+=s;
  212. break;
  213. }
  214. case S_ENDRETR: //we have received all of messages
  215. {
  216. s.Format("收到 %d 封信rn",pop3.GetRetrMsgNum());
  217. m_info+=s;
  218. if(pop3.GetRetrMsgNum()>0)
  219. GetDlgItem(IDC_BUTTON_VIEW)->EnableWindow(TRUE);
  220. break;
  221. }
  222. }
  223. UpdateData(FALSE);
  224. }
  225. void CPOP3SMTPDlg::OnButtonView() 
  226. {
  227. // TODO: Add your control notification handler code here
  228.  CChooseDlg dlg;
  229. dlg.DoModal();
  230. }