TextPlain.cpp
上传用户:weimei12
上传日期:2022-08-11
资源大小:185k
文件大小:3k
源码类别:

Email客户端

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "MIMEContentAgent.h"
  3. #include "TextPlain.h"
  4. #include "MailMessage.h"
  5. #include "MIMEMessage.h"
  6. #ifdef _DEBUG
  7. #undef THIS_FILE
  8. static char THIS_FILE[]=__FILE__;
  9. #define new DEBUG_NEW
  10. #endif
  11. //////////////////////////////////////////////////////////////////////
  12. // Construction/Destruction
  13. //////////////////////////////////////////////////////////////////////
  14. CTextPlain::CTextPlain(int nContentType, UINT nWrapPos)
  15. :CMIMEContentAgent(nContentType)
  16. {
  17. m_nWrapPos = nWrapPos;
  18. }
  19. CTextPlain::~CTextPlain()
  20. {
  21. }
  22. ///<summary>
  23. ///   Get the content type sting
  24. ///</summary>
  25. CString CTextPlain::GetContentTypeString()
  26. {
  27. CString s;
  28. s = _T("text/plain");
  29. return s;
  30. }
  31. ///<summary>
  32. ///   append it to the body
  33. ///</summary>
  34. BOOL CTextPlain::AppendPart(LPCTSTR szContent, 
  35. LPCTSTR szParameters, 
  36. int nEncoding, 
  37. BOOL bPath, 
  38. CString & strDestination)
  39. {
  40. CString strSubHeader;
  41. CString strWrapped;
  42. strSubHeader = BuildSubHeader(szContent, szParameters, nEncoding, bPath);
  43. strWrapped = WrapText(szContent);
  44. strDestination += (strSubHeader + strWrapped);
  45. return TRUE;
  46. }
  47. ///<summary>
  48. ///   construct the sub-part header
  49. ///</summary>
  50. CString CTextPlain::BuildSubHeader(LPCTSTR szContent, 
  51.    LPCTSTR szParameters, 
  52.    int nEncoding, 
  53.    BOOL bPath)
  54. {
  55. CString strSubHeader;
  56. strSubHeader.Format(_T("Content-Type: %s%srn"), GetContentTypeString(), szParameters);
  57. strSubHeader += _T("Content-Transfer-Encoding: ");
  58. switch(nEncoding)
  59. {
  60. // only 7bit encoding
  61. default:
  62. case CMIMEMessage::_7BIT:
  63. strSubHeader += _T("7bit");
  64. }
  65. strSubHeader += _T("rnrn");
  66. return strSubHeader;
  67. }
  68. ///<summary>
  69. ///   wrap the content
  70. ///</summary>
  71. CString CTextPlain::WrapText(LPCTSTR szText)
  72. {
  73. CString strTemp;
  74. ASSERT(szText != NULL);
  75. if(NULL == szText)
  76. {
  77. return strTemp;
  78. }
  79. CString strLeft;
  80. CString strRight;
  81. int lp = 0;
  82. UINT nCount = 0;
  83. int nSpacePos = 0;
  84. strTemp = szText;
  85. while(lp < strTemp.GetLength())
  86. {
  87. if(strTemp[lp] == ' ')
  88. {
  89. nSpacePos = lp;
  90. }
  91. // Reset the counter on a newline
  92. if(strTemp.Mid(lp, 2) == _T("rn"))
  93. {
  94. nCount = 0;
  95. }
  96. // Wrap text at last found space,change the space to rn
  97. if(nCount > m_nWrapPos)
  98. {
  99. strLeft = strTemp.Left(nSpacePos);
  100. strRight = strTemp.Right(strTemp.GetLength() - nSpacePos);
  101. strLeft.TrimRight();
  102. strRight.TrimLeft();
  103. strLeft += _T("rn");
  104. strTemp = strLeft + strRight;
  105. nCount = 0;
  106. }
  107. else
  108. {
  109. nCount++;
  110. }
  111. lp++;
  112. }
  113. return strTemp;
  114. }