Advertisement
Guest User

Untitled

a guest
Feb 13th, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.60 KB | None | 0 0
  1. using Helper;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Net.Sockets;
  6. using System.Text;
  7.  
  8. namespace Helper
  9. {
  10. /// <summary>
  11. /// Stellt eine E-Mail dar.
  12. /// </summary>
  13. public class Mail
  14. {
  15. #region Vars
  16. private string mSenderMail;
  17. private string mReceiverMail;
  18. private string mTitle;
  19. private string mContent;
  20. private string mDate;
  21. #endregion
  22.  
  23. #region Properties
  24. /// <summary>
  25. /// E-Mail Adresse des Versenders
  26. /// </summary>
  27. public string SenderMail
  28. {
  29. get { return mSenderMail; }
  30. set { mSenderMail = value; }
  31. }
  32. /// <summary>
  33. /// E-Mail Adresse des Empfängers
  34. /// </summary>
  35. public string ReceiverMail
  36. {
  37. get { return mReceiverMail; }
  38. set { mReceiverMail = value; }
  39. }
  40. /// <summary>
  41. /// Betreff
  42. /// </summary>
  43. public string Title
  44. {
  45. get { return mTitle; }
  46. set { mTitle = value; }
  47. }
  48. /// <summary>
  49. /// Inhalt
  50. /// </summary>
  51. public string Content
  52. {
  53. get { return mContent; }
  54. set { mContent = value; }
  55. }
  56. /// <summary>
  57. /// Datum und Zeit
  58. /// </summary>
  59. public string Date
  60. {
  61. get { return mDate; }
  62. set { mDate = value; }
  63. }
  64. #endregion
  65. }
  66. }
  67.  
  68. /// <summary>
  69. /// Stellt einen MailProvider zur Verfügung,
  70. /// der E-Mails abrufen kann.
  71. /// </summary>
  72. public class MailProvider
  73. {
  74. #region Vars
  75. private NetworkStream mPop3Stream;
  76. private StreamReader mStreamListener;
  77. private byte[] mCommandBuffer = new byte[1024];
  78. ASCIIEncoding mAscEncoding = new ASCIIEncoding();
  79. private string mPopServer;
  80. private int mPort;
  81. private string mUser;
  82. private string mPassword;
  83. #endregion
  84.  
  85. #region Properties
  86. /// <summary>
  87. /// POP-3 Server
  88. /// </summary>
  89. public string PopServer
  90. {
  91. get { return mPopServer; }
  92. set { mPopServer = value; }
  93. }
  94. /// <summary>
  95. /// Port des Servers
  96. /// </summary>
  97. public int Port
  98. {
  99. get { return mPort; }
  100. set { mPort = value; }
  101. }
  102. /// <summary>
  103. /// Benutzername
  104. /// </summary>
  105. public string User
  106. {
  107. get { return mUser; }
  108. set { mUser = value; }
  109. }
  110. /// <summary>
  111. /// Passwort
  112. /// </summary>
  113. public string Password
  114. {
  115. set { mPassword = value; }
  116. }
  117. #endregion
  118.  
  119. #region Ctor
  120. /// <summary>
  121. /// Initialisiert einen neuen MailProvider,
  122. /// der E-Mail empfangen kann.
  123. /// </summary>
  124. public MailProvider(string popServer, int port, string user, string pw)
  125. {
  126. // Zugangsinformationen zuweisen
  127. mPopServer = popServer;
  128. mPort = port;
  129. mUser = user;
  130. mPassword = pw;
  131.  
  132. // Verbindung zum Server herstellen
  133. establishConnection();
  134. }
  135. #endregion
  136.  
  137. #region Private Methods
  138. /// <summary>
  139. /// Stellt die Verbindung zum POP-Server her.
  140. /// </summary>
  141. private void establishConnection()
  142. {
  143. TcpClient server = new TcpClient();
  144.  
  145. // Verbindung herstellen
  146. server.Connect(this.PopServer, this.Port);
  147.  
  148. // Streams einleiten
  149. mPop3Stream = server.GetStream();
  150. mStreamListener = new StreamReader(mPop3Stream);
  151.  
  152. // Wenn erfolgreich verbunden
  153. if (server.Connected)
  154. {
  155. mStreamListener.ReadLine();
  156.  
  157. // Am Server anmelden
  158. mCommandBuffer = mAscEncoding.GetBytes(String.Format("USER {0}\r\n", this.User));
  159. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  160. mStreamListener.ReadLine();
  161. mCommandBuffer = mAscEncoding.GetBytes(String.Format("PASS {0}\r\n", mPassword));
  162. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  163. mStreamListener.ReadLine();
  164. }
  165. }
  166. /// <summary>
  167. /// Parst anhand des übergebenen Strings ein Mail-Objekt.
  168. /// </summary>
  169. private Mail parseMail(string input)
  170. {
  171. Mail retVal = null;
  172.  
  173. // E-Mail in 2 Hälften zerlegen (Header und Body)
  174. string[] emailSplit = input.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.None);
  175. string header = String.Empty;
  176. string body = String.Empty;
  177.  
  178. if (emailSplit.Length >= 2)
  179. {
  180. // Header
  181. header = emailSplit[0];
  182. // Body
  183. for (int i = 1; i < emailSplit.Length - 1; i++) body = String.Concat(body, "\r\n\r\n", emailSplit[i]);
  184. }
  185.  
  186. // Header-Informationen filtern
  187. retVal = getHeaderInformations(header);
  188.  
  189. // Content zuweisen
  190. retVal.Content = body;
  191.  
  192. // Mail-Objekt zurückgeben
  193. return retVal;
  194. }
  195. /// <summary>
  196. /// Gibt die Headerinformationen zurück.
  197. /// </summary>
  198. private Mail getHeaderInformations(string header)
  199. {
  200. Mail retVal = new Mail();
  201.  
  202. // Jede einzelne Zeile parsen
  203. foreach (string line in header.Split(new string[] { "\r\n" }, StringSplitOptions.None))
  204. {
  205. // Aufteilen in Schlüssel und Wert
  206. string[] lineSplit = line.Split(new string[] { ": " }, StringSplitOptions.None);
  207. string key = String.Empty;
  208. string value = String.Empty;
  209.  
  210. if (lineSplit.Length >= 2)
  211. {
  212. // Schlüssel
  213. key = lineSplit[0];
  214. // Wert
  215. for (int i = 1; i < lineSplit.Length; i++) value = String.Concat(value, lineSplit[i]);
  216. }
  217.  
  218. // Je nach Schlüssel den dazugehörigen Wert zuweisen
  219. switch (key)
  220. {
  221. // Absender
  222. case "From":
  223. retVal.SenderMail = value;
  224. break;
  225. // Empfänger
  226. case "To":
  227. retVal.ReceiverMail = value;
  228. break;
  229. // Betreff
  230. case "Subject":
  231. retVal.Title = value;
  232. break;
  233. //Datum und Zeit
  234. case "Date":
  235. retVal.Date = value;
  236. break;
  237. }
  238. }
  239.  
  240. return retVal;
  241. }
  242. #endregion
  243.  
  244. #region Public Methods
  245. /// <summary>
  246. /// Gibt alle E-Mails zurück.
  247. /// </summary>
  248. public List<Mail> GetMails(bool deleteMails)
  249. {
  250. List<Mail> retVal = new List<Mail>();
  251. List<string> mailList = new List<string>();
  252.  
  253. // Liste mit allen E-Mails anfordern
  254. mCommandBuffer = mAscEncoding.GetBytes("LIST\r\n");
  255. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  256. mStreamListener.ReadLine();
  257.  
  258. // Solange wie nicht "." ausgelesen wird, sind noch E-Mails
  259. // auf dem Server vorhanden
  260. string currMsg = mStreamListener.ReadLine();
  261. while (currMsg != ".")
  262. {
  263. mailList.Add(currMsg);
  264. currMsg = mStreamListener.ReadLine();
  265. }
  266.  
  267. // Die E-Mail Liste durchgehen
  268. foreach (string listVal in mailList)
  269. {
  270. Mail mail = null;
  271.  
  272. // Mail-Index filtern
  273. int mailNr = -1;
  274. try
  275. {
  276. mailNr = Convert.ToInt32(listVal.Split(' ')[0]);
  277. }
  278. catch { }
  279.  
  280. // Wenn der Mail-Index gefunden wurde, kompletten Mail Inhalt abrufen
  281. if (mailNr != -1)
  282. {
  283. mCommandBuffer = mAscEncoding.GetBytes(String.Format("RETR {0}\r\n",
  284. mailNr));
  285. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  286. StringBuilder mailContent = new StringBuilder();
  287.  
  288. // Solange nicht "." augelesen wird, ist die Email noch nicht zuende
  289. string tmpLine = mStreamListener.ReadLine();
  290. while (tmpLine != ".")
  291. {
  292. mailContent.AppendLine(tmpLine);
  293. tmpLine = mStreamListener.ReadLine();
  294. }
  295.  
  296. // E-Mail parsen
  297. mail = parseMail(mailContent.ToString());
  298.  
  299. //Mail löschen
  300. if (deleteMails == true)
  301. {
  302. mCommandBuffer = mAscEncoding.GetBytes(String.Format("DELE {0}\r\n", mailNr));
  303. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  304. mStreamListener.ReadLine();
  305. }
  306. }
  307.  
  308. if (mail != null)
  309. retVal.Add(mail);
  310. }
  311. mCommandBuffer = mAscEncoding.GetBytes(String.Format("QUIT\r\n"));
  312. mPop3Stream.Write(mCommandBuffer, 0, mCommandBuffer.Length);
  313. mStreamListener.ReadLine();
  314. return retVal;
  315. }
  316. #endregion
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement