powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вытянуть тело сообщения при помощи IMAP?
2 сообщений из 2, страница 1 из 1
Как вытянуть тело сообщения при помощи IMAP?
    #40132483
vladivanov192
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю почтовый клиент, который отправляет письма Gmail по Smtp и принимает по Imap. С отправкой проблем не возникло, а вот с получением имеется. Суть приёма сообщения такова: есть форма, где размещены два textBox'а. В первый нужно ввести логин, во второй - пароль. Дальше нажать на кнопку cmdReceive, и она передаст информацию в bindingSource1, а тот в свою очередь - в таблицу DataGridView.

Код программы изображён ниже:

Код: 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.
using DevExpress.XtraEditors;
using MailKit;
using MailKit.Net.Imap;
using MailKit.Search;
using MimeKit;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Simple_Email_Client
{
    public partial class Receive : DevExpress.XtraEditors.XtraForm
    {
        public Receive()
        {
            InitializeComponent();
        }
 
        private void cmdReceive_Click(object sender, EventArgs e)
        {
            var list = getMails();
            bindingSource1.DataSource = list;
        }
 
        private List<MailListItem> getMails()
        {
            var list = new List<MailListItem>();
 
                    using (var client = new ImapClient())
                        {
                            client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
                            client.CheckCertificateRevocation = false;
                            client.Connect("imap.gmail.com", 993, true);
                            client.Authenticate(txtUsername2.Text, txtPassword2.Text);
 
                            client.Inbox.Open(MailKit.FolderAccess.ReadOnly);
 
                            var uids = client.Inbox.Search(SearchQuery.DeliveredAfter(DateTime.Today.AddDays(-1)));
 
                            var messages = client.Inbox.Fetch(uids, MessageSummaryItems.Envelope | MessageSummaryItems.BodyStructure);
 
                            if (messages != null && messages.Count > 0)
                                {
                                    foreach (var msg in messages)
                                        {
                            var body = client.Inbox.GetBodyPart(msg.UniqueId, msg.BodyParts.First());
 
                        list.Add(new MailListItem
                            {
                                Date = msg.Date.ToString(),
                                From = msg.Envelope.From.ToString(),
                                Subj = msg.Envelope.Subject,
                                HasAttachments = msg.Attachments != null && msg.Attachments.Count() > 0,
                                Body = msg.BodyParts.First(),
                                
                            });
 
                                foreach (var att in msg.Attachments.OfType<BodyPartBasic>())
                                        {
                                            var part = (MimePart)client.Inbox.GetBodyPart(msg.UniqueId, att);
 
                                            var pathDir = Path.Combine(Environment.CurrentDirectory, "Emails", msg.UniqueId.ToString());
                                            if(!Directory.Exists(pathDir))
                                            {
                                                Directory.CreateDirectory(pathDir);
                                            }
 
                                            var path = Path.Combine(pathDir, part.FileName);
                                            if (!File.Exists(path))
                                                {
                                                    using(var strm = File.Create(path))
                                                    {
                                                        part.Content.DecodeTo(strm);
                                                    }
                                                }
                                        }
 
 
                                        }
                                }
                        }
 
            return list;
        }
 
        private void xpBindingSource1_ListChanged(object sender, ListChangedEventArgs e)
        {
 
        }
    }
}



В результате выполнения такого кода в строку, где должно быть тело сообщения, мне выводится текст, который изображён на картинке ниже. Т.е. ("TEXT" "HTML" (Charset = UTF8)N...) и т.д.



Прошу помочь решить эту проблему.
...
Рейтинг: 0 / 0
Как вытянуть тело сообщения при помощи IMAP?
    #40132581
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тiло состоит из всякой доп инфомации, которую надо прочитать и обработать и само сообщение, которое скорее всего в HTML или в какой угодно кодировке
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как вытянуть тело сообщения при помощи IMAP?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (9): Анонимы (6), Bing Bot, Yandex Bot, Google Bot 9 мин.
x
x
Закрыть


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