smtpDoc.cpp
上传用户:young001
上传日期:2007-07-04
资源大小:33k
文件大小:4k
源码类别:

WEB邮件程序

开发平台:

Visual C++

  1. // smtpDoc.cpp : implementation of the CSmtpDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "smtp.h"
  5. #include "smtpDoc.h"
  6. #include "CSmtp.h"
  7. #include "SmtpSetupDlg.h"
  8. #include "AttachDlg.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CSmtpDoc
  16. IMPLEMENT_DYNCREATE(CSmtpDoc, CDocument)
  17. BEGIN_MESSAGE_MAP(CSmtpDoc, CDocument)
  18. //{{AFX_MSG_MAP(CSmtpDoc)
  19. ON_COMMAND(ID_PREFERENCES_SEND, OnPreferencesSend)
  20. ON_COMMAND(ID_PREFERENCES_SETUP, OnPreferencesSetup)
  21. ON_COMMAND(ID_PREFERENCES_ATTACH, OnPreferencesAttach)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CSmtpDoc construction/destruction
  26. CSmtpDoc::CSmtpDoc()
  27. {
  28. // TODO: add one-time construction code here
  29. m_SmtpServer = AfxGetApp() -> GetProfileString(_T("SETUP"), _T("SMTPSERVER"), _T("smtp.263.net"));
  30. m_From = AfxGetApp() -> GetProfileString(_T("SETUP"), _T("FROM"), _T("coolkknd@263.net"));
  31. m_MailTo = AfxGetApp() -> GetProfileString(_T("SETUP"), _T("TO"), _T("coolkknd@263.net"));
  32. m_Subject = AfxGetApp() -> GetProfileString(_T("SETUP"), _T("SUBJECT"), _T("简单邮件发送测试"));
  33. }
  34. CSmtpDoc::~CSmtpDoc()
  35. {
  36. }
  37. BOOL CSmtpDoc::OnNewDocument()
  38. {
  39. if (!CDocument::OnNewDocument())
  40. return FALSE;
  41. ((CEditView*)m_viewList.GetHead())->SetWindowText(NULL);
  42. // TODO: add reinitialization code here
  43. // (SDI documents will reuse this document)
  44. return TRUE;
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CSmtpDoc serialization
  48. void CSmtpDoc::Serialize(CArchive& ar)
  49. {
  50. // CEditView contains an edit control which handles all serialization
  51. ((CEditView*) m_viewList.GetHead())->SerializeRaw(ar);
  52. }
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CSmtpDoc diagnostics
  55. #ifdef _DEBUG
  56. void CSmtpDoc::AssertValid() const
  57. {
  58. CDocument::AssertValid();
  59. }
  60. void CSmtpDoc::Dump(CDumpContext& dc) const
  61. {
  62. CDocument::Dump(dc);
  63. }
  64. #endif //_DEBUG
  65. /////////////////////////////////////////////////////////////////////////////
  66. // CSmtpDoc commands
  67. void CSmtpDoc::OnPreferencesSend() 
  68. {
  69. // TODO: Add your command handler code here
  70. POSITION pos = GetFirstViewPosition();
  71. CEditView* p_View = (CEditView*) GetNextView(pos);
  72. CEdit& m_Ctrl = p_View -> GetEditCtrl();
  73. CSmtp smtp("");
  74. CMIMEMessage msg;
  75. CBase64 auth;
  76. CString m_sErr;
  77. smtp.SetServerProperties(m_SmtpServer);
  78. smtp.m_User = auth.Encode(m_User,m_User.GetLength());
  79. smtp.m_Pass = auth.Encode(m_Pass,m_Pass.GetLength());
  80. m_sErr.Format("user: %srnpass: %srn",smtp.m_User,smtp.m_Pass);
  81. //AfxMessageBox(m_sErr);
  82. msg.m_sFrom = _T(m_From);
  83. msg.AddMultipleRecipients(m_MailTo);
  84. msg.m_sSubject = m_Subject;
  85. m_Ctrl.GetWindowText(msg.m_sBody);
  86. if(!smtp.Connect()) {
  87. AfxMessageBox(smtp.GetLastError());
  88. return ;
  89. }
  90. if(!smtp.Auth()) {
  91. AfxMessageBox(smtp.GetLastError());
  92. return ;
  93. }
  94. if(!smtp.SendMessage(&msg)) {
  95. AfxMessageBox(smtp.GetLastError());
  96. smtp.Disconnect();
  97. return ;
  98. }
  99. smtp.Disconnect();
  100. m_Files.RemoveAll();
  101. AfxMessageBox(_T("Message sent successfully"));
  102. }
  103. void CSmtpDoc::OnPreferencesSetup() 
  104. {
  105. // TODO: Add your command handler code here
  106. SmtpSetupDlg dlg;
  107. if (dlg.DoModal() == IDOK) {
  108. m_SmtpServer = dlg.m_SmtpServer;
  109. m_From = dlg.m_From;
  110. m_MailTo = dlg.m_MailTo;
  111. m_Subject = dlg.m_Subject;
  112. m_User = dlg.m_User;
  113. m_Pass = dlg.m_Pass;
  114. AfxGetApp() -> WriteProfileString(_T("SETUP"), _T("SMTPSERVER"), m_SmtpServer);
  115. AfxGetApp() -> WriteProfileString(_T("SETUP"), _T("FROM"), m_From);
  116. AfxGetApp() -> WriteProfileString(_T("SETUP"), _T("TO"), m_MailTo);
  117. AfxGetApp() -> WriteProfileString(_T("SETUP"), _T("SUBJECT"), m_Subject);
  118. }
  119. }
  120. void CSmtpDoc::OnPreferencesAttach() 
  121. {
  122. // TODO: Add your command handler code here
  123. AttachDlg dlg;
  124. if (dlg.DoModal() == IDOK) {
  125. m_Files.RemoveAll();
  126. m_Files.Append(dlg.m_Files);
  127. }
  128. }
  129. void CSmtpDoc::DeleteContents() 
  130. {
  131. // TODO: Add your specialized code here and/or call the base class
  132. m_Files.RemoveAll();
  133. CDocument::DeleteContents();
  134. }