powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранения письма в БД.
27 сообщений из 27, показаны все 2 страниц
Сохранения письма в БД.
    #38372461
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги.

Подскажите пожалуйста, сохраняю письма в базу данных.

Ситуация в общем такая

cmdParametrs.Add(Param(SqlDbType.NVarChar, ParameterDirection.Input, "@mBody", email.BodyHtml.Text)); Для всех почтовых организаций Google, Yahoo и т.д. сохраняет в виде html в базу данных. А вот с Yandex почты сохраняет в базу пустой текст.

Побывал указывать как текст, все равно одно и тоже.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372483
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставьте точку останова на этой строке... email что за тип? найдите по нему справку... возможно, все станет ясно...
и что такое Param?
отладчиком пользоваться умеете?
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372485
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserпоставьте точку останова на этой строке... email что за тип? найдите по нему справку... возможно, все станет ясно...
и что такое Param?
отладчиком пользоваться умеете?

Код: c#
1.
2.
3.
4.
foreach (AU.Message email in mailr.GetUnreadMails("INBOX"))
                        {
                              cmdParametrs.Add(Param(SqlDbType.DateTime, ParameterDirection.Input, "@mRecieved", email.ReceivedDate));
                        }



Дело в том, что для всех работает, а для Yandex не работает. Пустой текст. Может это как то связано с самим yandex.

Пустой текст в переменой, прошу прощения что сразу не написал результат отладчика.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372495
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AU.Message свойства у этого типа какие есть? дайте хоть ссылку на хелп :) я поищу за вас... :)
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372496
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MailSystem.NET ?
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372498
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591,

... загрузите письмо с разных серверов обычными клиентами, и посмотрите в источнике, чем заголовки отличаются ... (и какой их порядок следования) ...
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372826
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую вот эту библиотеку ActiveUp.Net.Mail

Посмотрел формат письма он приходит в html. Но от yandex он пуст. Остальные сервисы нормально работают.

Смысл у меня такой на почту приходит письма от разных почтовых сервисов. Моя программа их собирает и заносит в базу данных.
От кого, кому, тема письма, приложение.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372839
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы почтовым клиентом залезьте на Яндекс.Почту и скачайте "пустое" письмо. Потом можно и сюда выложить все письмо с заголовками и нераспарсенным содержимым. Я раньше Outlook Express использовал для этого.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372852
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79А вы почтовым клиентом залезьте на Яндекс.Почту и скачайте "пустое" письмо. Потом можно и сюда выложить все письмо с заголовками и нераспарсенным содержимым. Я раньше Outlook Express использовал для этого.

Начинаю сохранять письмо в Outlook нельзя сохранить письмо в html и MHT. Именно от Yandex. Все письма можно в этих форматах сохранить. От Yandex только в текстовый формат и Outlook.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372879
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591Arm79А вы почтовым клиентом залезьте на Яндекс.Почту и скачайте "пустое" письмо. Потом можно и сюда выложить все письмо с заголовками и нераспарсенным содержимым. Я раньше Outlook Express использовал для этого.

Начинаю сохранять письмо в Outlook нельзя сохранить письмо в html и MHT. Именно от Yandex. Все письма можно в этих форматах сохранить. От Yandex только в текстовый формат и Outlook.

И самое интересное, меняю формат сохранения письма в базу данных в текстовой полностью. Все равно пусто.
Взял поставил формат письма, чтоб мне в базу записал формат письма. Записал формат как html. Что за хе..я, от Yandex.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38372900
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну пришлите это "пустое" письмо на KazaryanAV@yandex.ru, дома гляну

Что касается использования сторонней библиотеки по работе с письмами - ничего не скажу. Я самописной пользуюсь и не жужжу

Могу выслать либу, с её помощью можно глянуть "сырое" письмо
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38373023
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591,

... я могу ошибаться, но отличие Яндексовских писем от большинства иных серверов в том, что на яндексе идет следующая очередность заголовков:

Код: html
1.
2.
Content-Transfer-Encoding: base64
Content-Type: text/html; charset=utf-8



... тогда как на других серверах - наоборот, сначала Content-Type, потом Content-Transfer-Encoding ... Вроде как нормальная библиотека не должна от этого глючить, но мало ли, как они там регэкс используют ...
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38373086
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да... вроде там была бага с парсингом заголовков... вроде её фиксили... можно попробовать забрать сорцы и перекомпилять... либо текущее подебажить...
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38373568
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Ну пришлите это "пустое" письмо на KazaryanAV@yandex.ru, дома гляну

Что касается использования сторонней библиотеки по работе с письмами - ничего не скажу. Я самописной пользуюсь и не жужжу

Могу выслать либу, с её помощью можно глянуть "сырое" письмо

Тебе письмо с Outlook прислать? ( просто разница какая, создаешь письмо в yandex и отправляешь его. Вот такого типа письма.)

Или что, просто не пойму.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38373611
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591,

... загрузите (получите) письмо с Яндекса в обычный почтовый клиент типа Outlook Express или Thunderbird, а потом на сообщении "Свойства-Исходный текст" - и увидите текстовое представление сообщения со всеми заголовками и HTML-ом .. А потом сравните с письмами с других серверов ...
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38373638
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591,

Ок, гляну сам :-) Но позже, тк на работе нет доступа к внешним почтовым сервисам.


carrotikзагрузите (получите) письмо с Яндекса в обычный почтовый клиент типа Outlook Express или Thunderbird, а потом на сообщении "Свойства-Исходный текст" - и увидите текстовое представление сообщения со всеми заголовками и HTML-ом

Советую так и сделать.


Если никак, то можно взять прикрепленную, набросанную на скорую руку, утилиту и выложить сюда текст письма (просмотр - дабл клик на строке)
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374203
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проблему свою путем обновления библиотеки ActiveUp.Net.Mail.

И написал не большое условие.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if (email.IsHtml == false)
                            {
                                cmdParametrs.Add(Param(SqlDbType.NVarChar, ParameterDirection.Input, "@mBody", email.BodyText.Text));
                                cmdParametrs.Add(Param(SqlDbType.Int, ParameterDirection.Input, "@mIsHtml", 0));
                            }
                            else
                            {
                                cmdParametrs.Add(Param(SqlDbType.NVarChar, ParameterDirection.Input, "@mBody", email.BodyHtml.Text));
                                cmdParametrs.Add(Param(SqlDbType.Int, ParameterDirection.Input, "@mIsHtml", 1));
                            }



Теперь в базу данных записывает все отлично.
Спасибо всем, кто всячески старался помочь.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374208
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Скинь мне свой код написанный. Спасибо заранее.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374349
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дезассемблируй :-) А что именно нужно?
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374364
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Думаю у тебя найдется наподобие библиотеки ActiveUp.Net.Mail. (КОД) (ИЛИ САМА БИБЛИОТЕКА)

На будущее пригодилось бы.
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374386
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wiktor591,

я несколькими попользовался, меня не впечатлило. Написал сам, но, так уж получилось, подробной документации с примерами нет :-)

На какую почту слать?
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374450
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

... кстати, если уж зашел разговор о самописных - я тоже подобным баловался, и мне интересно, как вы реализовали создание дерева частей сообщения? ... у меня это деревянно получилось с использованием парсинга ответа fetch ID bodystructure методом тупого подсчета открывающих и закрывающих скобок (через Stack() ), а потом я загнал это в веб-контрол TreeView и пронумеровал узлы ... Вот чувствую, что это по-папуасски, но иного метода так и не пришло в голову ... :)
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374508
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код древний, и ради выкладывания на форуме причесывать не буду

По факту: дерево строится в момент парсинга. Каждый MailPart содержит свою инфу и список всех частей.
Перебор: сначала сделал рекурсию, потом выкинул, решил, что в библиотеке это не нужно. Это сторона ответственности вызывающего кода.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
/// <summary>
    /// Класс, инкапсулирующий работу с частью письма
    /// </summary>
    public sealed class MailPart
    {
        #region Private Members

        private readonly string _rawData;
        private readonly string _text;
        private readonly MailPartHeader _header;
        private readonly MailAttachment _attachment;
        private readonly List<MailPart> _pairs;

        /// <summary>
        /// Выбор строки произвольной заголовка по ее имени
        /// </summary>
        /// <param name="headerEntries">Исходный список, в котором нужно вести поиск</param>
        /// <param name="paramName">Произвольное имя параметра</param>
        /// <returns>Параметр со значениями</returns>
        private static MailPartHeaderEntry GetHeaderEntry(IEnumerable<MailPartHeaderEntry> headerEntries, string paramName)
        {
            if (headerEntries == null)
                return null;

            var findedEntries = headerEntries.Where(_he => _he.Name == paramName.ToUpper());
            return findedEntries.Count() != 0? findedEntries.First() : null;
        }

        #endregion

        #region Properties
        
        public string ContentType
        {
            get { return _header.ContentType; }
        }
        public string CharSet
        {
            get { return _header.CharSet; }
        }
        public MailPartHeader Header
        {
            get { return _header; }
        }

        public string Text
        {
            get { return _text; }
        }
        public MailAttachment Attachment
        {
            get { return _attachment; }
        }
        public IList<MailPart> Parts
        {
            get { return _pairs.AsReadOnly(); }
        }

        #endregion

        #region .ctor

        public MailPart(string rawData)
        {
            _rawData = rawData;
            _pairs = new List<MailPart>();

            // делим на две зоны
            var terminator = _rawData.IndexOf("\r\n\r\n");
            var header = (terminator != -1) ? _rawData.Substring(0, terminator) : _rawData;
            var body = (terminator != -1) ? _rawData.Substring(terminator + 4) : string.Empty;

            // парсим заголовок
            _header = new MailPartHeader(header);

            // парсим тело 
            // 1) Является ли тело вложением?
            var contentDisposition = GetHeaderEntry(_header.HeaderEntries, "Content-Disposition");
            if (contentDisposition != null)
            {
                if (contentDisposition.Value == "attachment")
                {
                    var fileName = GetHeaderEntry(contentDisposition.SubEntries, "filename");
                    var contentType = GetHeaderEntry(_header.HeaderEntries, "Content-Type");
                    var contentDescription = GetHeaderEntry(_header.HeaderEntries, "Content-Description");
                    var contentEncoding = GetHeaderEntry(_header.HeaderEntries, "Content-Transfer-Encoding");
                    var name = contentType != null ? GetHeaderEntry(contentType.SubEntries, "name") : null;

                    _attachment = new MailAttachment(
                        body,
                        _header.CharSet,
                        contentEncoding != null ? MimeParser.GetTextWithoutQuotes(contentEncoding.Value) : "7bit",
                        name != null ? name.Value : string.Empty,
                        fileName != null ? fileName.Value : string.Empty,
                        contentDescription != null ? contentDescription.Value : String.Empty);
                }
            }
            else
            {
                // 2) Является ли многочастевым?
                if (_header.ContentType.StartsWith("multipart"))
                {
                    // Определяем границу
                    var ct = GetHeaderEntry(_header.HeaderEntries, "Content-Type");
                    if (ct == null)
                        throw new ApplicationException("Невозможно определить тэг ContentType, чтобы из него получить границы");
                    
                    var b = GetHeaderEntry(ct.SubEntries, "boundary");
                    if (b == null)
                        throw new ApplicationException(string.Format("не найдены границы, хотя ContentType={0}", _header.ContentType));

                    string boundary = "--" + MimeParser.GetTextWithoutQuotes(b.Value);

                    // берем нужные кусочеки и превращаем их в пары
                    var begin = body.IndexOf(string.Format("\r\n{0}", boundary)) + boundary.Length + 2 /*передние \r\n*/ + 2 /*задние \r\n*/;
                    var end = body.IndexOf(string.Format("{0}--\r\n", boundary), begin);
                    _pairs.AddRange(
                        body
                            .Substring(begin, end - begin)
                            .Split(new string[] { string.Format("\r\n{0}", boundary) }, StringSplitOptions.RemoveEmptyEntries)
                            .Select( _s => new MailPart(_s)));
                }
                else
                {
                    // 3) Голый текст
                    byte[] _buffer;
                    var contentEncoding = GetHeaderEntry(_header.HeaderEntries, "Content-Transfer-Encoding");
                    switch (contentEncoding != null ? contentEncoding.Value : "7bit")
                    {
                        case "base64":
                            _buffer = MimeParser.FromBase64Encoding(body);
                            break;
                        case "quoted-printable":
                            _buffer = MimeParser.FromQuotedPrintableEncoding(body);
                            break;
                        case "8bit":
                            _buffer = MimeParser.ConvertTo8BitBinary(CharSet, body);
                            break;
                        default:
                            _buffer = MimeParser.ConvertTo7BitBinary(body);
                            break;
                    }

                    _text = Encoding.GetEncoding(CharSet).GetString(_buffer);
                }
            }
        } 

        #endregion
    }
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374511
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikfetch ID bodystructure методом тупого подсчета открывающих и закрывающих скобок

Что за скобки то?
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374571
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79 carrotik fetch ID bodystructure методом тупого подсчета открывающих и закрывающих скобок

Что за скобки то?

... понял, вы по boundary парсите ... а скобки - я получаю результат fetch ID bodystructure вот примерно в таком виде

Код: sql
1.
(BODYSTRUCTURE ((("text" "plain" ("charset" "koi8-r" "format" "flowed") NIL NIL "8bit" 1179 38 NIL NIL NIL)("text" "html" ("charset" "koi8-r") NIL NIL "8bit" 2635 67 NIL NIL NIL) "alternative" ("boundary" "------------020703050405040805060905") NIL NIL)("text" "plain" ("charset" "windows-1251" "name" "release.txt") NIL NIL "8bit" 2912 63 NIL ("attachment" ("filename" "release.txt")) NIL)("application" "octet-stream" ("name" "Accnt.e_xe") NIL NIL "base64" 3054896 NIL ("attachment" ("filename" "Accnt.e_xe")) NIL)("text" "plain" ("charset" "windows-1251" "name" "rp12q1.txt") NIL NIL "base64" 6026 81 NIL ("attachment" ("filename" "rp12q1.txt")) NIL) "mixed" ("boundary" "------------090109070404030309040501") NIL NIL))



... считаю скобки и нумерую части, а потом обращаюсь по этим номерам fetch ID body[НомерЧасти.mime] и собираю заголовки, а уж вооружившись этими заголовками затем fetch ID body[НомерЧасти.text] ... У меня проект на ASP.NET для веба (плюс на VB.NET) ...
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38374643
wiktor591
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79код древний, и ради выкладывания на форуме причесывать не буду

По факту: дерево строится в момент парсинга. Каждый MailPart содержит свою инфу и список всех частей.
Перебор: сначала сделал рекурсию, потом выкинул, решил, что в библиотеке это не нужно. Это сторона ответственности вызывающего кода.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
/// <summary>
    /// Класс, инкапсулирующий работу с частью письма
    /// </summary>
    public sealed class MailPart
    {
        #region Private Members

        private readonly string _rawData;
        private readonly string _text;
        private readonly MailPartHeader _header;
        private readonly MailAttachment _attachment;
        private readonly List<MailPart> _pairs;

        /// <summary>
        /// Выбор строки произвольной заголовка по ее имени
        /// </summary>
        /// <param name="headerEntries">Исходный список, в котором нужно вести поиск</param>
        /// <param name="paramName">Произвольное имя параметра</param>
        /// <returns>Параметр со значениями</returns>
        private static MailPartHeaderEntry GetHeaderEntry(IEnumerable<MailPartHeaderEntry> headerEntries, string paramName)
        {
            if (headerEntries == null)
                return null;

            var findedEntries = headerEntries.Where(_he => _he.Name == paramName.ToUpper());
            return findedEntries.Count() != 0? findedEntries.First() : null;
        }

        #endregion

        #region Properties
        
        public string ContentType
        {
            get { return _header.ContentType; }
        }
        public string CharSet
        {
            get { return _header.CharSet; }
        }
        public MailPartHeader Header
        {
            get { return _header; }
        }

        public string Text
        {
            get { return _text; }
        }
        public MailAttachment Attachment
        {
            get { return _attachment; }
        }
        public IList<MailPart> Parts
        {
            get { return _pairs.AsReadOnly(); }
        }

        #endregion

        #region .ctor

        public MailPart(string rawData)
        {
            _rawData = rawData;
            _pairs = new List<MailPart>();

            // делим на две зоны
            var terminator = _rawData.IndexOf("\r\n\r\n");
            var header = (terminator != -1) ? _rawData.Substring(0, terminator) : _rawData;
            var body = (terminator != -1) ? _rawData.Substring(terminator + 4) : string.Empty;

            // парсим заголовок
            _header = new MailPartHeader(header);

            // парсим тело 
            // 1) Является ли тело вложением?
            var contentDisposition = GetHeaderEntry(_header.HeaderEntries, "Content-Disposition");
            if (contentDisposition != null)
            {
                if (contentDisposition.Value == "attachment")
                {
                    var fileName = GetHeaderEntry(contentDisposition.SubEntries, "filename");
                    var contentType = GetHeaderEntry(_header.HeaderEntries, "Content-Type");
                    var contentDescription = GetHeaderEntry(_header.HeaderEntries, "Content-Description");
                    var contentEncoding = GetHeaderEntry(_header.HeaderEntries, "Content-Transfer-Encoding");
                    var name = contentType != null ? GetHeaderEntry(contentType.SubEntries, "name") : null;

                    _attachment = new MailAttachment(
                        body,
                        _header.CharSet,
                        contentEncoding != null ? MimeParser.GetTextWithoutQuotes(contentEncoding.Value) : "7bit",
                        name != null ? name.Value : string.Empty,
                        fileName != null ? fileName.Value : string.Empty,
                        contentDescription != null ? contentDescription.Value : String.Empty);
                }
            }
            else
            {
                // 2) Является ли многочастевым?
                if (_header.ContentType.StartsWith("multipart"))
                {
                    // Определяем границу
                    var ct = GetHeaderEntry(_header.HeaderEntries, "Content-Type");
                    if (ct == null)
                        throw new ApplicationException("Невозможно определить тэг ContentType, чтобы из него получить границы");
                    
                    var b = GetHeaderEntry(ct.SubEntries, "boundary");
                    if (b == null)
                        throw new ApplicationException(string.Format("не найдены границы, хотя ContentType={0}", _header.ContentType));

                    string boundary = "--" + MimeParser.GetTextWithoutQuotes(b.Value);

                    // берем нужные кусочеки и превращаем их в пары
                    var begin = body.IndexOf(string.Format("\r\n{0}", boundary)) + boundary.Length + 2 /*передние \r\n*/ + 2 /*задние \r\n*/;
                    var end = body.IndexOf(string.Format("{0}--\r\n", boundary), begin);
                    _pairs.AddRange(
                        body
                            .Substring(begin, end - begin)
                            .Split(new string[] { string.Format("\r\n{0}", boundary) }, StringSplitOptions.RemoveEmptyEntries)
                            .Select( _s => new MailPart(_s)));
                }
                else
                {
                    // 3) Голый текст
                    byte[] _buffer;
                    var contentEncoding = GetHeaderEntry(_header.HeaderEntries, "Content-Transfer-Encoding");
                    switch (contentEncoding != null ? contentEncoding.Value : "7bit")
                    {
                        case "base64":
                            _buffer = MimeParser.FromBase64Encoding(body);
                            break;
                        case "quoted-printable":
                            _buffer = MimeParser.FromQuotedPrintableEncoding(body);
                            break;
                        case "8bit":
                            _buffer = MimeParser.ConvertTo8BitBinary(CharSet, body);
                            break;
                        default:
                            _buffer = MimeParser.ConvertTo7BitBinary(body);
                            break;
                    }

                    _text = Encoding.GetEncoding(CharSet).GetString(_buffer);
                }
            }
        } 

        #endregion
    }




Спасибо
...
Рейтинг: 0 / 0
Сохранения письма в БД.
    #38375040
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они как то хвалились в вакансиях своей самой "быстрой" почтой в мире. Типа отдают ее в xml, а html получается в зависимости от возможностей браузера через xslt на клиентской или серверной стороне.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сохранения письма в БД.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]