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


           

если MIME не содержит MultipartMixed,


//#define _DEBUG
namespace Mail { using System; using System.Diagnostics; using System.Text; using System.IO; using System.Text.RegularExpressions; using System.Security.Cryptography;
using Mail.Providers;
public class Mime : Common { #region DEBUG FileStream GetDebugStream() { return new FileStream(@"C:\trace_mimes.log", FileMode.Append); } [Conditional("_DEBUG")] void Trace(string str) { FileStream fs = GetDebugStream(); byte [] b = Encoding.ASCII.GetBytes(str); fs.Write(b, 0, b.Length); fs.Close(); } #endregion
internal AttachDescriptor _attach = null;
/// <summary> /// Конструктор. /// </summary> /// <param name="pm">Провайдер.</param> /// <param name="message">Текст сообщения.</param> internal Mime(Provider pm, string message) : base(pm, message) { // если MIME не содержит MultipartMixed, то осуществляется попытка проверки на наличие вложений if (!MultipartMixed()) { FindAttachment(); } } /// <summary> /// Определение вложения сообщения. /// </summary> void FindAttachment() { // Если вложения нет, возвращаемся назад if (ContentDisposition == null) { return; }
string [] cd = ContentDisposition.Split(new char [] {';'}, 2); switch(cd[0].ToLower()) { case "attachment": ExtractAttachment(cd[1]); break;
case "inline": throw new CoreException("не реализовано");
default: throw new ParseException("Неизвестный ContentDisposition:" + cd[0]); } } /// <summary> /// Получение имени вложенного файла. /// </summary> /// <param name="filename"></param> /// <returns></returns> string GetAttachmentFilename(string filename) { Regex r = new Regex("filename=[\\\"]?([^\\r\\\"]+)"); Match m = r.Match(filename); if (!m.Success) { return String.Empty; }
return Utils.WordDecoder(m.Groups[1].ToString()); } /// <summary> /// Извлечение прикрепленных файлов из сообщения. /// </summary> /// <param name="filename">Название временного файла.</param> void ExtractAttachment(string filename) { _attach = new AttachDescriptor(GetAttachmentFilename(filename), _pop3.TempDirectory);
switch (TransferEncoding) { case "base64": _attach.DecodeFile(_message, new FromBase64Transform()); break;
case "quoted-printable": _attach.DecodeFile(_message, new FromQuotedPrintableTransform()); break;
default: Debug.WriteLine("Неизвестный тип кодировки."); break; } }
#region Common headers /// <summary> /// Возвращение заголовка content-disposition, сообщающего о вложении. /// </summary> string ContentDisposition { get { return (string)Headers["content-disposition"]; } } #endregion } }
Листинг 3.16.
Закрыть окно
Содержание  Назад  Вперед