MyEmailClientDlg.cpp
上传用户:qzzxgm
上传日期:2009-12-14
资源大小:1882k
文件大小:6k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // MyEmailClientDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MyEmailClient.h"
  5. #include "MyEmailClientDlg.h"
  6. #include "MailMessage.h"
  7. #include "POP3.h"
  8. #include "SMTP.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CAboutDlg dialog used for App About
  16. class CAboutDlg : public CDialog
  17. {
  18. public:
  19. CAboutDlg();
  20. // Dialog Data
  21. //{{AFX_DATA(CAboutDlg)
  22. enum { IDD = IDD_ABOUTBOX };
  23. //}}AFX_DATA
  24. // ClassWizard generated virtual function overrides
  25. //{{AFX_VIRTUAL(CAboutDlg)
  26. protected:
  27. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  28. //}}AFX_VIRTUAL
  29. // Implementation
  30. protected:
  31. //{{AFX_MSG(CAboutDlg)
  32. //}}AFX_MSG
  33. DECLARE_MESSAGE_MAP()
  34. };
  35. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  36. {
  37. //{{AFX_DATA_INIT(CAboutDlg)
  38. //}}AFX_DATA_INIT
  39. }
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CAboutDlg)
  44. //}}AFX_DATA_MAP
  45. }
  46. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  47. //{{AFX_MSG_MAP(CAboutDlg)
  48. // No message handlers
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CMyEmailClientDlg dialog
  53. CMyEmailClientDlg::CMyEmailClientDlg(CWnd* pParent /*=NULL*/)
  54. : CDialog(CMyEmailClientDlg::IDD, pParent)
  55. {
  56. //{{AFX_DATA_INIT(CMyEmailClientDlg)
  57. m_Body = _T("");
  58. m_From = _T("");
  59. m_Password = _T("");
  60. m_POP3 = _T("");
  61. m_SMTP = _T("");
  62. m_To = _T("");
  63. m_User = _T("");
  64. m_Subject = _T("");
  65. //}}AFX_DATA_INIT
  66. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  67. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  68. }
  69. void CMyEmailClientDlg::DoDataExchange(CDataExchange* pDX)
  70. {
  71. CDialog::DoDataExchange(pDX);
  72. //{{AFX_DATA_MAP(CMyEmailClientDlg)
  73. DDX_Text(pDX, IDC_BODY, m_Body);
  74. DDX_Text(pDX, IDC_FROM, m_From);
  75. DDX_Text(pDX, IDC_PASSWORD, m_Password);
  76. DDX_Text(pDX, IDC_POP3, m_POP3);
  77. DDX_Text(pDX, IDC_SMTP, m_SMTP);
  78. DDX_Text(pDX, IDC_TO, m_To);
  79. DDX_Text(pDX, IDC_USER, m_User);
  80. DDX_Text(pDX, IDC_SUBJECT, m_Subject);
  81. //}}AFX_DATA_MAP
  82. }
  83. BEGIN_MESSAGE_MAP(CMyEmailClientDlg, CDialog)
  84. //{{AFX_MSG_MAP(CMyEmailClientDlg)
  85. ON_WM_SYSCOMMAND()
  86. ON_WM_PAINT()
  87. ON_WM_QUERYDRAGICON()
  88. ON_BN_CLICKED(IDC_SEND, OnSend)
  89. ON_BN_CLICKED(IDC_RETR, OnRetr)
  90. //}}AFX_MSG_MAP
  91. END_MESSAGE_MAP()
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CMyEmailClientDlg message handlers
  94. BOOL CMyEmailClientDlg::OnInitDialog()
  95. {
  96. CDialog::OnInitDialog();
  97. // Add "About..." menu item to system menu.
  98. // IDM_ABOUTBOX must be in the system command range.
  99. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  100. ASSERT(IDM_ABOUTBOX < 0xF000);
  101. CMenu* pSysMenu = GetSystemMenu(FALSE);
  102. if (pSysMenu != NULL)
  103. {
  104. CString strAboutMenu;
  105. strAboutMenu.LoadString(IDS_ABOUTBOX);
  106. if (!strAboutMenu.IsEmpty())
  107. {
  108. pSysMenu->AppendMenu(MF_SEPARATOR);
  109. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  110. }
  111. }
  112. // Set the icon for this dialog.  The framework does this automatically
  113. //  when the application's main window is not a dialog
  114. SetIcon(m_hIcon, TRUE); // Set big icon
  115. SetIcon(m_hIcon, FALSE); // Set small icon
  116. // TODO: Add extra initialization here
  117. return TRUE;  // return TRUE  unless you set the focus to a control
  118. }
  119. void CMyEmailClientDlg::OnSysCommand(UINT nID, LPARAM lParam)
  120. {
  121. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  122. {
  123. CAboutDlg dlgAbout;
  124. dlgAbout.DoModal();
  125. }
  126. else
  127. {
  128. CDialog::OnSysCommand(nID, lParam);
  129. }
  130. }
  131. // If you add a minimize button to your dialog, you will need the code below
  132. //  to draw the icon.  For MFC applications using the document/view model,
  133. //  this is automatically done for you by the framework.
  134. void CMyEmailClientDlg::OnPaint() 
  135. {
  136. if (IsIconic())
  137. {
  138. CPaintDC dc(this); // device context for painting
  139. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  140. // Center icon in client rectangle
  141. int cxIcon = GetSystemMetrics(SM_CXICON);
  142. int cyIcon = GetSystemMetrics(SM_CYICON);
  143. CRect rect;
  144. GetClientRect(&rect);
  145. int x = (rect.Width() - cxIcon + 1) / 2;
  146. int y = (rect.Height() - cyIcon + 1) / 2;
  147. // Draw the icon
  148. dc.DrawIcon(x, y, m_hIcon);
  149. }
  150. else
  151. {
  152. CDialog::OnPaint();
  153. }
  154. }
  155. // The system calls this to obtain the cursor to display while the user drags
  156. //  the minimized window.
  157. HCURSOR CMyEmailClientDlg::OnQueryDragIcon()
  158. {
  159. return (HCURSOR) m_hIcon;
  160. }
  161. //发信
  162. void CMyEmailClientDlg::OnSend() 
  163. {
  164. //更新数据
  165. UpdateData( TRUE );
  166. //建立CSMTP对象
  167. CSMTP smtp( m_SMTP );
  168. //新建CMailMessage对象,并初始化
  169. CMailMessage msg;
  170. msg.m_sFrom = m_From;
  171. msg.AddMultipleRecipients( m_To );
  172. msg.m_sSubject = m_Subject;
  173. msg.m_sBody = m_Body;
  174. //连接SMTP服务器
  175. if( !smtp.Connect() )
  176. {
  177. AfxMessageBox( smtp.GetLastError() );
  178. return;
  179. }
  180. //发信
  181. if( !smtp.SendMessage( &msg ) )
  182. {
  183. AfxMessageBox( smtp.GetLastError() );
  184. return;
  185. }
  186. //断开连接
  187. if( !smtp.Disconnect() )
  188. {
  189. AfxMessageBox( smtp.GetLastError() );
  190. return;
  191. }
  192. AfxMessageBox( _T( "Message Sent Successfully") );
  193. }
  194. //收信
  195. void CMyEmailClientDlg::OnRetr() 
  196. {
  197. //更新数据
  198. UpdateData( TRUE );
  199. //新建CPOP3对象
  200. CPOP3 pop3( m_POP3 );
  201. pop3.SetUserProperties(m_User,m_Password);
  202. //连接POP3服务器
  203. if (!pop3.Connect())
  204. {
  205. AfxMessageBox( pop3.GetLastError() );
  206. return;
  207. }
  208. //收取信件
  209. CMailMessage msg;
  210. if (!pop3.GetMessage(1,&msg))
  211. {
  212. AfxMessageBox( pop3.GetLastError() );
  213. return;
  214. }
  215. //显示信件
  216. m_Body=msg.m_sBody;
  217. m_Subject=msg.m_sSubject;
  218. m_From=msg.m_sFrom;
  219. m_To="";
  220. for (int a=0; a<msg.GetNumRecipients(); a++)
  221. {
  222. CString sEmail;
  223. CString sFriendly;
  224. msg.GetRecipient(sEmail,sFriendly,a);
  225. m_To+=sEmail;
  226. m_To+=" ";
  227. }
  228. m_To.TrimRight();
  229. //断开连接
  230. if( !pop3.Disconnect() )
  231. {
  232. AfxMessageBox( pop3.GetLastError() );
  233. return;
  234. }
  235. AfxMessageBox( _T( "Successfully disconnected" ) );
  236. UpdateData(FALSE);
  237. }