PageMailPop3.cpp
上传用户:geanq888
上传日期:2007-01-03
资源大小:316k
文件大小:8k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // PageMailPop3.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "netmanager.h"
  5. #include "PageMailPop3.h"
  6. #include "PageMailAccount.h"
  7. #include "GlobalsExtern.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CPageMailPop3 property page
  15. IMPLEMENT_DYNCREATE(CPageMailPop3, CPropertyPage)
  16. CPageMailPop3::CPageMailPop3() : CPropertyPage(CPageMailPop3::IDD)
  17. {
  18. //{{AFX_DATA_INIT(CPageMailPop3)
  19. //}}AFX_DATA_INIT
  20. }
  21. CPageMailPop3::~CPageMailPop3()
  22. {
  23. }
  24. void CPageMailPop3::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CPropertyPage::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CPageMailPop3)
  28. DDX_Control(pDX, IDC_SERVERS, m_Servers);
  29. DDX_Control(pDX, IDC_MAILS, m_Mails);
  30. //}}AFX_DATA_MAP
  31. }
  32. BEGIN_MESSAGE_MAP(CPageMailPop3, CPropertyPage)
  33. //{{AFX_MSG_MAP(CPageMailPop3)
  34. ON_BN_CLICKED(IDC_ADD, OnAdd)
  35. ON_BN_CLICKED(IDC_EDIT, OnEdit)
  36. ON_BN_CLICKED(IDC_REMOVE, OnRemove)
  37. ON_BN_CLICKED(IDC_GETMAIL, OnGetmail)
  38. ON_BN_CLICKED(IDC_DELETE, OnDelete)
  39. ON_BN_CLICKED(IDC_VIEW, OnView)
  40. ON_NOTIFY(NM_DBLCLK, IDC_SERVERS, OnDblclkServers)
  41. ON_BN_CLICKED(IDC_POP3_SAVE, OnPop3Save)
  42. //}}AFX_MSG_MAP
  43. END_MESSAGE_MAP()
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CPageMailPop3 message handlers
  46. BOOL CPageMailPop3::OnInitDialog() 
  47. {
  48. CPropertyPage::OnInitDialog();
  49.   m_ToolTip.Create(this);
  50.   m_ToolTip.Activate(TRUE);
  51.   CWnd* pWnd = GetWindow(GW_CHILD);
  52.   while(pWnd)
  53.   {
  54.     int nID = pWnd->GetDlgCtrlID();
  55.     if (nID != -1)
  56.       m_ToolTip.AddTool(pWnd, pWnd->GetDlgCtrlID());
  57.     pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  58.   }
  59.   m_Servers.InsertColumn(0, _T("Server"));
  60.   m_Servers.SetColumnWidth(0, 100);
  61.   m_Servers.InsertColumn(1, _T("Username"));
  62.   m_Servers.SetColumnWidth(1, 100);
  63.   m_Mails.InsertColumn(0, _T("Server"));
  64.   m_Mails.SetColumnWidth(0, 50);
  65.   m_Mails.InsertColumn(1, _T("From"));
  66.   m_Mails.SetColumnWidth(1, 100);
  67.   m_Mails.InsertColumn(2, _T("Subject"));
  68.   m_Mails.SetColumnWidth(2, 100);
  69.   m_Mails.InsertColumn(3, _T("Date"));
  70.   m_Mails.SetColumnWidth(3, 100);
  71.   return TRUE;  // return TRUE unless you set the focus to a control
  72.               // EXCEPTION: OCX Property Pages should return FALSE
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. void CPageMailPop3::OnAdd() 
  76. {
  77.   CPageMailAccount dlg;
  78.   if(dlg.DoModal() == IDOK)
  79.   {
  80.     int nItem = m_Servers.GetItemCount();
  81.     m_Servers.InsertItem(nItem, LPCTSTR(dlg.m_sServer));
  82.     m_Servers.SetItemText(nItem, 1, LPCTSTR(dlg.m_sUsername));
  83.     
  84.     ACCOUNT account;
  85.     account.sServer = dlg.m_sServer;
  86.     account.nPort = dlg.m_nPort;
  87.     account.sUsername = dlg.m_sUsername;
  88.     account.sPassword = dlg.m_sPassword;
  89.     m_aAccounts.Add(account);
  90.   }
  91. }
  92. /////////////////////////////////////////////////////////////////////////////
  93. void CPageMailPop3::OnEdit() 
  94. {
  95.   CPageMailAccount dlg;
  96.   int nItem = -1;
  97.   while((nItem = m_Servers.GetNextItem(nItem, LVNI_SELECTED)) != -1 )
  98.   {
  99.     dlg.m_sServer = m_aAccounts[nItem].sServer;
  100.     dlg.m_nPort = m_aAccounts[nItem].nPort;
  101.     dlg.m_sUsername = m_aAccounts[nItem].sUsername;
  102.     dlg.m_sPassword = m_aAccounts[nItem].sPassword;
  103.     if(dlg.DoModal() == IDOK)
  104.     {
  105.       m_Servers.SetItemText(nItem, 0, LPCTSTR(dlg.m_sServer));
  106.       m_Servers.SetItemText(nItem, 1, LPCTSTR(dlg.m_sUsername));
  107.     
  108.       ACCOUNT account;
  109.       account.sServer = dlg.m_sServer;
  110.       account.nPort = dlg.m_nPort;
  111.       account.sUsername = dlg.m_sUsername;
  112.       account.sPassword = dlg.m_sPassword;
  113.       m_aAccounts.SetAt(nItem, account);
  114.     }
  115.   }
  116. }
  117. /////////////////////////////////////////////////////////////////////////////
  118. void CPageMailPop3::OnRemove() 
  119. {
  120.   if(MessageBox("Really remove?", NULL, MB_ICONQUESTION | MB_YESNO) != IDNO)
  121.   {
  122.     int nItem = -1;
  123.     while((nItem = m_Servers.GetNextItem(nItem, LVNI_SELECTED)) != -1)
  124.     {
  125.       m_Servers.DeleteItem(nItem);
  126.       m_aAccounts.RemoveAt(nItem);
  127.       nItem = -1;
  128.     }
  129.   }
  130. }
  131. /////////////////////////////////////////////////////////////////////////////
  132. void CPageMailPop3::OnDblclkServers(NMHDR* pNMHDR, LRESULT* pResult) 
  133. {
  134.   OnGetmail();
  135. *pResult = 0;
  136. }
  137. /////////////////////////////////////////////////////////////////////////////
  138. void CPageMailPop3::OnGetmail() 
  139. {
  140.   int nItem = -1;
  141.   while((nItem = m_Mails.GetNextItem(nItem, LVNI_SELECTED)) != -1)
  142.   {
  143.     m_Pop.SetHost(m_aAccounts[nItem].sServer);
  144.     m_Pop.SetPort(m_aAccounts[nItem].nPort);
  145.     m_Pop.SetUser(m_aAccounts[nItem].sUsername);
  146.     m_Pop.SetPassword(m_aAccounts[nItem].sPassword);
  147.     if(!m_Pop.Connect())
  148.     {
  149.       AfxMessageBox(m_Pop.GetErrorMessage());
  150.       return;
  151.     }
  152.     if(!m_Pop.Statistics())
  153.     {
  154.       AfxMessageBox(m_Pop.GetErrorMessage());
  155.       return;
  156.     }
  157.     m_Mails.DeleteAllItems();
  158.     UINT nMailNum = m_Pop.GetNumberOfMails();
  159.     for(UINT nItem = 0; nItem < nMailNum; nItem++)
  160.     {
  161.       m_Mails.InsertItem(nItem, "From");
  162.       m_Mails.SetItemText(nItem, 1, "Subject");
  163.     }
  164.     break;
  165.   }
  166. }
  167. /////////////////////////////////////////////////////////////////////////////
  168. void CPageMailPop3::OnDelete() 
  169. {
  170.   if(MessageBox("Really delete?", NULL, MB_ICONQUESTION | MB_YESNO) != IDNO)
  171.   {
  172.     int nItem = -1;
  173.     while((nItem = m_Mails.GetNextItem(nItem, LVNI_SELECTED)) != -1)
  174.     {
  175.       if(!m_Pop.Delete(nItem + 1))
  176.         AfxMessageBox(m_Pop.GetErrorMessage());
  177.       else
  178.         m_Mails.DeleteItem(nItem);
  179.       nItem = -1;
  180.     }
  181.   }
  182. }
  183. /////////////////////////////////////////////////////////////////////////////
  184. void CPageMailPop3::OnView() 
  185. {
  186.   int nItem = -1;
  187.   while((nItem = m_Mails.GetNextItem(nItem, LVNI_SELECTED)) != -1)
  188.   {
  189.     if(m_Pop.Retrieve(nItem + 1))
  190.     {
  191.       g_WriteToOutput(TRUE, m_Pop.GetMsgContents());
  192.     }
  193.     else
  194.       AfxMessageBox(m_Pop.GetErrorMessage());
  195.   }
  196. }
  197. /////////////////////////////////////////////////////////////////////////////
  198. void CPageMailPop3::OnPop3Save() 
  199. {
  200.   int nItem = -1;
  201.   while((nItem = m_Mails.GetNextItem(nItem, LVNI_SELECTED)) != -1 )
  202.   {
  203.     CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT);
  204.     if(dlg.DoModal() == IDOK)
  205.     {
  206.       CString sPath = dlg.GetPathName();
  207.       if(m_Pop.Retrieve(nItem + 1, sPath)) // Getting any particular mail message to file
  208.         g_WriteToOutput(TRUE, "[Pop3] Message saved to file " + sPath);
  209.       else
  210.         AfxMessageBox(m_Pop.GetErrorMessage());
  211.     }
  212.   }
  213. }
  214. /////////////////////////////////////////////////////////////////////////////
  215. void CPageMailPop3::Serialize(CArchive& ar) 
  216. {
  217.   CString sItem;
  218. if (ar.IsStoring())
  219. { // storing code
  220.     int j = m_aAccounts.GetSize();
  221.     ar << j;
  222.     for(int i = 0; i < j; i++)
  223.     {
  224.       ar << m_aAccounts[i].sServer;
  225.       ar << m_aAccounts[i].nPort;
  226.       ar << m_aAccounts[i].sUsername;
  227.       ar << m_aAccounts[i].sPassword;
  228.     }
  229. }
  230. else
  231. { // loading code
  232.     ACCOUNT account;
  233.     int j;
  234.     ar >> j;
  235.     j = atoi((LPCTSTR)sItem);
  236.     for(int i = 0; i < j; i++)
  237.     {
  238.       ar >> account.sServer;
  239.       ar >> account.nPort;
  240.       ar >> account.sUsername;
  241.       ar >> account.sPassword;
  242.       m_aAccounts.Add(account);
  243.       m_Servers.InsertItem(i, m_aAccounts[i].sServer);
  244.       m_Servers.SetItemText(i, 1, m_aAccounts[i].sUsername);
  245.     }
  246. }
  247. }
  248. /////////////////////////////////////////////////////////////////////////////
  249. BOOL CPageMailPop3::PreTranslateMessage(MSG* pMsg) 
  250. {
  251.   // transate the message based on TTM_WINDOWFROMPOINT
  252.   MSG msg = *pMsg;
  253.   msg.hwnd = (HWND)m_ToolTip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
  254.   CPoint pt = pMsg->pt;
  255.   if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
  256.           ::ScreenToClient(msg.hwnd, &pt);
  257.   msg.lParam = MAKELONG(pt.x, pt.y);
  258.   // Let the ToolTip process this message.
  259.   m_ToolTip.RelayEvent(&msg);
  260. return CPropertyPage::PreTranslateMessage(pMsg);
  261. }
  262. /////////////////////////////////////////////////////////////////////////////