Mailkit POP3: получить текст вложения без заголовков

Я загружаю сообщения POP3 с прикрепленным файлом CSV. Мне нужно получить простой текст во вложении, и я делаю это так:

For Each BP As MimeKit.MimeEntity In Msg.BodyParts
   'Filtering:
   If Not BP.IsAttachment = True Then Continue For
   If Not BP.ContentDisposition.FileName.EndsWith(".csv") Then Continue For

   Console.WriteLine((DirectCast(BP, MimeKit.TextPart).Text))
Next

Эта работа, если

BP.ContentType.MediaType = "text"
BP.ContentType.MimeType = "csv"

Но если, например, MediaType = application Я не могу преобразовать BodyPart в TextPart и получить доступ к свойству .Text.

Я могу получить полный текст вложения, используя BP.ToString, но он возвращает все, включая. заголовки:

Content-Type: application/vnd.ms-excel;
name="MyFile.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="MyFile.csv"

2018-03-10 10:12;0.797;m3/h;1.8;-0.3;1.8;m3;0.000;0.000;96;5346=0A=
2018-03-10 10:13;0.820;m3/h;1.8;-0.3;1.8;m3;0.000;0.000;96;5346=0A=
2018-03-10 10:14;0.868;m3/h;1.9;-0.3;1.9;m3;0.000;0.000;96;5346=0A=
2018-03-10 10:15;0.549;m3/h;1.9;-0.3;1.9;m3;0.000;0.000;96;5346=0A=
2018-03-10 10:16;0.281;m3/h;1.9;-0.3;1.9;m3;0.000;0.000;96;5346=0A=

1: Как мне получить текст вложения основной части независимо от значения в ContentType..

2: Я загружаю всю почту / вложение, прежде чем выполнять фильтрацию. Как я могу загрузить только заголовки вложений, которые будут использоваться при фильтрации?


person MrCalvin    schedule 11.03.2018    source источник


Ответы (1)


Общий способ получения содержимого MimePart в C # выглядит следующим образом (извините, я не знаю VB):

using (var memory = new MemoryStream ()) {
    part.Content.DecodeTo (memory);

    var buffer = memory.ToArray ();
    var text = Encoding.UTF8.GetString (buffer);
}
person jstedfast    schedule 11.03.2018
comment
Я также пробовал это, это все равно даст вам все, вкл. заголовки. Должен быть метод mime, который разделяет прикрепляемую часть на объекты: заголовки и содержимое ... но не может его найти. MimeKit.TextPart.Text делает это, но работает только с некоторыми письмами. - person MrCalvin; 12.03.2018
comment
.. чтобы быть точным, я пробовал part.WriteTo(memory) Я предполагаю, что он делает то же самое. У меня нет part.Content - person MrCalvin; 12.03.2018
comment
Обязательно приведите к MimePart, тогда у вас будет свойство Content. И нет, это не то же самое, что part.WriteTo (). - person jstedfast; 12.03.2018
comment
Работает отлично :-) Могу я прочитать где-нибудь в документации, которую можно преобразовать в MimePart? - person MrCalvin; 12.03.2018