MAILMESSAGE.CPP
上传用户:sanlisteel
上传日期:2008-06-19
资源大小:98k
文件大小:4k
源码类别:

数据库系统

开发平台:

C/C++

  1. #include "stdafx.h"
  2. #include "MailMessage.h"
  3. #ifdef _DEBUG
  4. #undef THIS_FILE
  5. static char THIS_FILE[]=__FILE__;
  6. #define new DEBUG_NEW
  7. #endif
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CMailMessage::CMailMessage()
  12. {
  13.      m_sBody=_T("");
  14.      m_sHeader=_T("");
  15. }
  16. CMailMessage::~CMailMessage()
  17. {
  18. }
  19. //将收件人地址加到m_Recipients数组中
  20. BOOL CMailMessage::AddRecipient( LPCTSTR szEmailAddress, LPCTSTR szFriendlyName)
  21. {
  22. ASSERT( szEmailAddress != NULL );
  23. ASSERT( szFriendlyName != NULL );
  24. CRecipient to;
  25. to.m_sEmailAddress = szEmailAddress;
  26. to.m_sFriendlyName = szFriendlyName;
  27. m_Recipients.Add( to );
  28. return TRUE;
  29. }
  30. //从类CRecipient中提取收信人地址
  31. BOOL CMailMessage::GetRecipient(CString & sEmailAddress, CString & sFriendlyName, int nIndex)
  32. {
  33. CRecipient to;
  34. if( nIndex < 0 || nIndex > m_Recipients.GetUpperBound() )
  35. return FALSE;
  36. to = m_Recipients[ nIndex ];
  37. sEmailAddress = to.m_sEmailAddress;
  38. sFriendlyName = to.m_sFriendlyName;
  39. return TRUE;
  40. }
  41. //确定收信人数
  42. int CMailMessage::GetNumRecipients()
  43. {
  44. return m_Recipients.GetSize();
  45. }
  46. //收信人地址->数组m_Recipients
  47. BOOL CMailMessage::AddMultipleRecipients(LPCTSTR szRecipients )
  48. {
  49. TCHAR* buf;
  50. UINT pos;
  51. UINT start;
  52. CString sTemp;
  53. CString sEmail;
  54. CString sFriendly;
  55. UINT length;
  56. int nMark;
  57. int nMark2;
  58. ASSERT( szRecipients != NULL );
  59. length = strlen( szRecipients );
  60. buf = new TCHAR[ length + 1 ];
  61. strcpy( buf, szRecipients );
  62. for( pos = 0, start = 0; pos <= length; pos++ )
  63. {
  64. if( buf[ pos ] == ';' ||
  65. buf[ pos ] == 0 )
  66. {
  67. buf[ pos ] = 0;
  68. sTemp = &buf[ start ];
  69. nMark = sTemp.Find( '<' );
  70. if( nMark >= 0 )
  71. {
  72. sFriendly = sTemp.Left( nMark );
  73. nMark2 = sTemp.Find( '>' );
  74. if( nMark2 < nMark )
  75. {
  76. delete[] buf;
  77. return FALSE;
  78. }
  79. nMark2 > -1 ? nMark2 = nMark2 : nMark2 = sTemp.GetLength() - 1;
  80. sEmail = sTemp.Mid( nMark + 1, nMark2 - (nMark + 1) );
  81. }
  82. else
  83. {
  84. sEmail = sTemp;
  85. sFriendly = _T( "" );
  86. }
  87. AddRecipient( sEmail, sFriendly );
  88. start = pos + 1;
  89. }
  90. }
  91. delete[] buf;
  92. return TRUE;
  93. }
  94. //发信前格式化邮件
  95. void CMailMessage::FormatMessage()
  96. {
  97. start_header();
  98. prepare_header();
  99. end_header();
  100. prepare_body();
  101. }
  102. //格式化标头
  103. void CMailMessage::prepare_header()
  104. {
  105. CString sTemp;
  106. sTemp = _T( "" );
  107. sTemp = _T( "寄信人地址: " ) + m_sFrom;
  108. add_header_line( (LPCTSTR)sTemp );
  109. sTemp = _T( "收信人地址: " );
  110. CString sEmail = _T( "" );
  111. CString sFriendly = _T( "" );
  112. for( int i = 0; i < GetNumRecipients(); i++ )
  113. {
  114. GetRecipient( sEmail, sFriendly, i );
  115. sTemp += ( i > 0 ? _T( "," ) : _T( "" ) );
  116. sTemp += sFriendly;
  117. sTemp += _T( "<" );
  118. sTemp += sEmail;
  119. sTemp += _T( ">" );
  120. }
  121. add_header_line( (LPCTSTR)sTemp );
  122. // 日期
  123. m_tDateTime = m_tDateTime.GetCurrentTime();
  124. sTemp = _T( "日期: " );
  125. sTemp += m_tDateTime.Format( "%a, %d %b %y %H:%M:%S %Z" );
  126. add_header_line( (LPCTSTR)sTemp );
  127. sTemp = _T( "主题: " ) + m_sSubject;
  128. add_header_line( (LPCTSTR)sTemp );
  129. }
  130. //邮件体格式化
  131. void CMailMessage::prepare_body()
  132. {
  133. // 需要时,添加CR/LF
  134. if( m_sBody.Right( 2 ) != _T( "rn" ) )
  135. m_sBody += _T( "rn" );
  136. }
  137. //准备格式化标头
  138. void CMailMessage::start_header()
  139. {
  140. m_sHeader = _T( "" );
  141. }
  142. //结束标头格式化
  143. void CMailMessage::end_header()
  144. {
  145. m_sHeader += _T( "rn" );
  146. }
  147. //增加项到标头
  148. void CMailMessage::add_header_line(LPCTSTR szHeaderLine)
  149. {
  150. CString sTemp;
  151. sTemp.Format( _T( "%srn" ), szHeaderLine );
  152. m_sHeader += sTemp;
  153. }