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

Email服务器

开发平台:

C#

  1. using System;
  2. using System.IO;
  3. using System.Data;
  4. namespace LumiSoft.MailServer
  5. {
  6. /// <summary>
  7. /// Provides methods to handle messages(store,retrieve,...).
  8. /// </summary>
  9. public class MailStore
  10. {
  11. private static string m_MailStorePath = "";
  12. #region function GetMessageList
  13. /// <summary>
  14. /// Get user mail messages.
  15. /// </summary>
  16. /// <param name="mailbox"></param>
  17. public static void GetMessageList(string mailbox,LumiSoft.MailServer.POP3.GetMessagesInfo_EventArgs e)
  18. {
  19. try
  20. {
  21. MailServer.API.GetMessageList(mailbox,e.Messages);
  22. }
  23. catch(Exception x)
  24. {
  25. Error.DumpError(x,new System.Diagnostics.StackTrace());
  26. }
  27. }
  28. #endregion
  29. #region function StoreMessage
  30. /// <summary>
  31. /// Stores message to specifeied mailbox.
  32. /// </summary>
  33. /// <param name="mailbox">Mailbx name.</param>
  34. /// <param name="msgStream">Message stream.</param>
  35. /// <param name="to">Receptient e-adress.</param>
  36. /// <param name="from">Sender e-address.</param>
  37. /// <param name="relay">Specifies if message must be stored to relay folder.</param>
  38. public static void StoreMessage(string mailbox,MemoryStream msgStream,string to,string from,bool relay)
  39. {
  40. try
  41. {
  42. if(relay){
  43. // Create dummy file name
  44. string filename = Guid.NewGuid().ToString();
  45.        filename = filename.Substring(0,22);
  46.            filename = filename.Replace("-","_");
  47. string path = m_MailStorePath + "Relay\";
  48. // Check if Directory exists, if not Create
  49. if(!Directory.Exists(path)){
  50. Directory.CreateDirectory(path);
  51. }
  52. //---- Write message data to file -------------------------------//
  53. using(FileStream fStream = File.Create(path + "\" + filename + ".eml",(int)msgStream.Length)){
  54. // Write internal relay info line at the beginning of messsage.
  55. // Note: This line is skipped when sending to destination host,
  56. // actual message begins from 2 line.
  57. // Header struct: 'RelayInfo:IsUndeliveredWarningSent<TAB>To<TAB>Sender<TAB>Datern'
  58. string internalServerHead = "RelayInfo:0t" + to + "t" + from + "t" + DateTime.Now.ToString("f") + "rn";
  59. byte[] sHead = System.Text.Encoding.Default.GetBytes(internalServerHead);
  60. fStream.Write(sHead,0,sHead.Length);
  61. msgStream.WriteTo(fStream);
  62. }
  63. //---------------------------------------------------------------//
  64. }
  65. else{
  66. MailServer.API.StoreMessage(mailbox,msgStream);
  67. }
  68. }
  69. catch(Exception x)
  70. {
  71. Error.DumpError(x,new System.Diagnostics.StackTrace());
  72. }
  73. }
  74. #endregion
  75. #region function GetMessage
  76. /// <summary>
  77. /// Gets Mail Message from specified Mailbox.
  78. /// </summary>
  79. /// <param name="mailbox">Mailbox name</param>
  80. /// <param name="msgID">Message MessageID</param>
  81. /// <returns></returns>
  82. public static byte[] GetMessage(string mailbox,string msgID)
  83. {
  84. byte[] retVal = null;
  85. try
  86. {
  87. retVal = MailServer.API.GetMessage(mailbox,msgID);
  88. }
  89. catch(Exception x)
  90. {
  91. Error.DumpError(x,new System.Diagnostics.StackTrace());
  92. }
  93. return retVal;
  94. }
  95. #endregion
  96. #region function DeleteMessage
  97. /// <summary>
  98. /// Deletes Message from specified Mailbox.
  99. /// </summary>
  100. /// <param name="mailbox">Mailbox name</param>
  101. /// <param name="msgID">MessageID.</param>
  102. public static void DeleteMessage(string mailbox,string msgID)
  103. {
  104. try
  105. {
  106. MailServer.API.DeleteMessage(mailbox,msgID);
  107. }
  108. catch(Exception x)
  109. {
  110. Error.DumpError(x,new System.Diagnostics.StackTrace());
  111. }
  112. }
  113. #endregion
  114. #region Properties Implementation
  115. /// <summary>
  116. /// Gets or set mail store path.
  117. /// </summary>
  118. public static string MailStorePath
  119. {
  120. get{ return m_MailStorePath; }
  121. set{ m_MailStorePath = value; }
  122. }
  123. #endregion
  124. }
  125. }