Создание Windows-приложений на основе Visual C#


           

Если ответ слишком большой, отсекаем


int total = buf.Length; while (total > 0) { total -= _socket.Send(buf, command.Length, SocketFlags.None); } } /// <summary> /// Анализ POP3-строки. /// </summary> /// <param name="str">Строка.</param> void AnalyseResponse(string str) { Trace(str); // Debug.WriteLine(str);

if (str.StartsWith(STAT_ERR)) { string msg; int i = str.IndexOf(CRLF); if (i < 0) { msg = "Ответ сервера: " + STAT_ERR; } else { // Если ответ слишком большой, отсекаем его. msg = str.Substring(STAT_ERR.Length + 1, Math.Min(i - STAT_ERR.Length - 1, 79)); }

throw new ResponseException(msg); } }

/// <summary> /// Получение сообщения в POP3-формате. /// </summary> /// <param name="index">Номер сообщения.</param> /// <returns></returns> public StringReader DumpMessage(int index) { CheckConnection();

Send("RETR " + index); return new StringReader(Receive()); } /// <summary> /// Удаление символов конца сообщения. /// </summary> /// <param name="message">Сообщение.</param> /// <returns></returns> string TruncateTail(string message) { if (!message.EndsWith(FiveOctalTerm)) { Debug.WriteLine("Последние 5 символов: {" + message.Substring(message.Length — 5) + "}"); throw new ResponseException("Неправильные символы конца сообщения."); }

return message.Remove(message.Length — FiveOctalTerm.Length, FiveOctalTerm.Length); }

/// <summary> /// Получение существующих номеров сообщений. /// </summary> /// <returns>Массив с существующими индексами сообщений.</returns> /// <example>Команда LIST. Сервер выдает информацию о всех сообщениях, находящихся в почтовом ящике. /// Сообщения, помеченные для удаления, не перечисляются. /// </example> public uint[] ListMessages() { CheckConnection();

if (_messagelist == null) { Send("LIST"); string tmp = Receive(); tmp = TruncateTail(tmp); int start = tmp.IndexOf(CRLF); if (start > 0) { start += CRLF.Length; ArrayList l = new ArrayList(); Regex r = new Regex(@"\r\n"); string [] list = r.Split(tmp.Substring(start)); if (list.Length > 0) { foreach (string s in list) { string [] f = s.Split(new char [] {' '}, 2); l.Add(Convert.ToUInt32(f[0], 10)); } }


Содержание  Назад  Вперед