RelayInfo.cs
上传用户:horngjaan
上传日期:2009-12-12
资源大小:2882k
文件大小:4k
源码类别:

Email服务器

开发平台:

C#

  1. using System;
  2. using System.IO;
  3. namespace LumiSoft.MailServer
  4. {
  5. /// <summary>
  6. /// This class parses relay info from message.
  7. /// </summary>
  8. public class RelayInfo
  9. {
  10. private string   m_To                 = "";
  11. private string   m_From               = "";
  12. private bool     m_IsWSent            = false;
  13. private DateTime m_MsgDate;
  14. private int      m_Undelivered        = 1;
  15. private int      m_UndeliveredWarning = 1;
  16. private int      m_MsgStartPos        = 0;
  17. /// <summary>
  18. /// Default constructor.
  19. /// </summary>
  20. /// <param name="relayMsgStrm">Message stream from to read relay info.</param>
  21. /// <param name="undelivered">Specifies hours when message is readed to be undelivered.</param>
  22. /// <param name="undeliveredWarning">Specifies minutes when delayed delivery warning is sent.</param>
  23. public RelayInfo(Stream relayMsgStrm,int undelivered,int undeliveredWarning)
  24. {
  25. ReadRelayInfo(relayMsgStrm);
  26. m_Undelivered = undelivered;
  27. m_UndeliveredWarning = undeliveredWarning;
  28. }
  29. #region function ReadRelayInfo
  30. /// <summary>
  31. /// Parses relay info from stream.
  32. /// </summary>
  33. /// <param name="relayMsgStrm"></param>
  34. private void ReadRelayInfo(Stream relayMsgStrm)
  35. {
  36. TextReader reader = new StreamReader(relayMsgStrm);
  37. string relayHead = reader.ReadLine();
  38. if(relayHead != null && relayHead.StartsWith("RelayInfo:")){
  39. relayHead = relayHead.Replace("RelayInfo:","");
  40. relayHead = relayHead.Trim();
  41. string[] param = relayHead.Split(new char[]{'t'});
  42. if(param.Length == 4){
  43. m_IsWSent = Convert.ToBoolean(Convert.ToInt32(param[0]));
  44. m_To      = param[1];
  45. m_From    = param[2];
  46. m_MsgDate = DateTime.Parse(param[3]);
  47. }
  48. m_MsgStartPos = relayHead.Length + 1; // rn(2) + (-1 for 0 based pos)
  49. relayMsgStrm.Position = m_MsgStartPos;
  50. }
  51. }
  52. #endregion
  53. #region Properties Implementation
  54. /// <summary>
  55. /// Gets recipient.
  56. /// </summary>
  57. public string To
  58. {
  59. get{ return m_To; }
  60. }
  61. /// <summary>
  62. /// Gets sender.
  63. /// </summary>
  64. public string From
  65. {
  66. get{ return m_From; }
  67. }
  68. /// <summary>
  69. /// Gets message store date.
  70. /// </summary>
  71. public DateTime MessageDate
  72. {
  73. get{ return m_MsgDate; }
  74. }
  75. /// <summary>
  76. /// Gets if undelivered warning is sent.
  77. /// </summary>
  78. public bool IsUndeliveredWarningSent
  79. {
  80. get{ return m_IsWSent; }
  81. }
  82. /// <summary>
  83. /// Gets if undelivered date is exceeded.
  84. /// </summary>
  85. public bool IsUndeliveredDateExceeded
  86. {
  87. get{
  88. if(DateTime.Now.CompareTo(m_MsgDate.AddHours(m_Undelivered)) >= 0){
  89. return true;
  90. }
  91. else{
  92. return false;
  93. }
  94. }
  95. }
  96. /// <summary>
  97. /// Gets if must send undelivered warning.
  98. /// </summary>
  99. public bool MustSendWarning
  100. {
  101. get{ 
  102. if(!m_IsWSent && DateTime.Now.CompareTo(m_MsgDate.AddMinutes(m_UndeliveredWarning)) >= 0){
  103. return true;
  104. }
  105. else{
  106. return false;
  107. }
  108. }
  109. }
  110. /// <summary>
  111. /// Gets undelivered bit position in stream.
  112. /// </summary>
  113. public int WarningBitPos
  114. {
  115. get{ return 10; }
  116. }
  117. /// <summary>
  118. /// Gets message start position in stream.
  119. /// </summary>
  120. public int MessageStartPos
  121. {
  122. get{ return m_MsgStartPos; }
  123. }
  124. /// <summary>
  125. /// Gets how many hours server will try to send message.
  126. /// </summary>
  127. public int DeviveringForHours
  128. {
  129. get{ return m_Undelivered-(m_UndeliveredWarning/60); }
  130. }
  131. #endregion
  132. }
  133. }