Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 5

Обработка входящей корреспонденции Outlook

02.09.2017, 10:10. Показов 2470. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем доброго дня!

Возник вопрос, как можно перенести обработку входящей корреспонденции Outlook 2010 (IMAP) в C#.

На ПК уже установлен Outlook и есть учётная запись которая не является учетной записью по умолчанию, поступающие письма которой необходимо обработать в Windows Form без Аутентификации.

То есть на форме есть поле, в котором должно отображаться информация по письму как указанно на рис. 1

При выборе любого письма в полях отправитель и тело письма должна отобразиться информация относящая к данному письму (рис. 2 и 3).

Подскажите как можно реализовать данную задачу
Миниатюры
Обработка входящей корреспонденции Outlook   Обработка входящей корреспонденции Outlook   Обработка входящей корреспонденции Outlook  

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2017, 10:10
Ответы с готовыми решениями:

Обработка непрочитанных сообщений Outlook
Всем доброго дня! В Outlook есть учетная запись которая не является учетной записью по умолчанию, тип данной учетной записи IMAP/SMTP....

Исходники программы регистрации входящей / исходящей корреспонденции
Здравствуйте. Много пользовался сообщениями форума. Искренне признателен всем участникам. С вашей помощью, друзья, написал небольшую...

Чтение входящей почты используя outlook
можно ли читать входящие письма с выводом на форму используя контрол\библиотеку outlook?

2
0 / 0 / 0
Регистрация: 17.08.2017
Сообщений: 5
03.09.2017, 11:03  [ТС]
кто нибудь знает как решить задачу обработки непрочитанных входящих, без Аутентификации ???
0
 Аватар для Aferuga
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
06.09.2017, 04:50
Лучший ответ Сообщение было отмечено Margenal как решение

Решение

Писал года два назад, коряво но работает:
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Data.Linq;
using System.Runtime.InteropServices;
using ol = Microsoft.Office.Interop.Outlook;
...
        public Form1()
        {
            InitializeComponent();
        }
        static string wd = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        public int num;
        private ol.NameSpace nm1; //= new ol.NameSpace();
        private ol.NameSpace nm2;
        private ol.MAPIFolder mf1; //= new ol.MAPIFolder();
        private ol.Folder mf2;
        private ol.MailItem mi2;
        public string filename;
        public ol.Application ol1 = null;
        public List<Str_mail> li_mail = new List<Str_mail>();
 
        public struct Str_mail
        {
            public int id;
            public string Name, Otpr, Pol;
            public DateTime data_o;
            public List<string> attachments;
            public ol.MailItem _mi;
            public Str_mail(ol.MailItem mi,int _id)
            {
                id = _id;
                _mi = mi;
                Name = (mi.Subject==null?"":mi.Subject);
                Otpr = (mi.SenderName == null ? "" : mi.SenderName);
                data_o =  mi.ReceivedTime;
                Pol = (mi.ReceivedByName == null ? "" :mi.ReceivedByName);
                attachments = new List<string>();
                if (mi.Attachments.Count > 0)
                {
                    foreach (ol.Attachment att1 in mi.Attachments)
                    {
                        if (att1.FileName.Substring(0, 5) != "image")
                            attachments.Add(att1.FileName);
                    }
                }
            }
        }
        //кнопка отобразить письма
        private void button10_Click(object sender, EventArgs e)
        {
            if (Directory.Exists(String.Format("{0}\\cashe\\letter\\",wd)) == true)
                Directory.Delete(String.Format("{0}\\cashe\\letter\\", wd), true);
            if (Process.GetProcessesByName("OUTLOOK").Count() <= 0)
            {
                ol1 = new ol.Application();
                nm1 = ol1.GetNamespace("MAPI");
                nm1.Logon(maskedTextBox1.Text, maskedTextBox2.Text, true, true);
                nm1 = null;
            }
            ol1 = new ol.Application();
            nm1 = ol1.GetNamespace("MAPI");
            listBox1.Items.Clear();
            ol1.CreateObject("Outlook.Application");
            nm1.Logon(maskedTextBox1.Text, maskedTextBox2.Text, true, true);
            mf1 = nm1.GetDefaultFolder(ol.OlDefaultFolders.olFolderInbox);
            if (Directory.Exists(String.Format("{0}\\cashe\\letter\\", wd)) == false)
                Directory.CreateDirectory(String.Format("{0}\\cashe\\letter\\", wd));
            li_mail.Clear();
            int id=0;
            foreach (var mi1 in mf1.Items)
            {
                if ((mi1 as ol.MailItem) != null)
                {
                    li_mail.Add(new Str_mail((mi1 as ol.MailItem), id++));
                    listBox1.Items.Add(li_mail.Last().Name);
                }
            }
            label7.Text = listBox1.Items.Count.ToString();
        }
 
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listBox2.Items.Clear();
            if (listBox1.SelectedItem != null)
            {
                mf1 = nm1.GetDefaultFolder(ol.OlDefaultFolders.olFolderInbox);
 
                Str_mail str = (from i in li_mail
                                where i.id == listBox1.SelectedIndex
                                select i).FirstOrDefault();
                string s = (listBox1.SelectedIndex+1).ToString();
                
                textBox1.Text = str.Name;
                textBox2.Text = str.Otpr;
                textBox3.Text = str.data_o.ToShortDateString();
                textBox4.Text = str.Pol;
                foreach (string it in str.attachments)
                {
                    listBox2.Items.Add(it);
                }
                mi2 = str._mi;
                if (File.Exists(String.Format("{0}\\cashe\\letter\\{2}.html",wd,s)) == false)
                {
                    mi2.SaveAs(String.Format("{0}\\cashe\\letter\\{2}.html", wd, s), ol.OlSaveAsType.olHTML);
                }
                InitWebBrowser(webBrowser1, String.Format("{0}\\cashe\\letter\\{2}.html", wd, s));
             };
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            if (Directory.Exists(String.Format("{0}\\SED\\cashe\\letter\\", wd)) == true)
                Directory.Delete(String.Format("{0}\\SED\\cashe\\letter\\", wd), true);
            try
            {
                if (Process.GetProcessesByName("OUTLOOK").Count() <= 0)
                {
                    ol1 = new ol.Application();
                    nm1 = ol1.GetNamespace("MAPI");
                    nm1.Logon("", "", true, true);
                    nm1 = null;
                }
                ol1 = new ol.Application();
                nm1 = ol1.GetNamespace("MAPI");
                listBox1.Items.Clear();
                ol1.CreateObject("Outlook.Application");
                nm1.Logon("", "", true, true);
                mf1 = nm1.GetDefaultFolder(ol.OlDefaultFolders.olFolderInbox);
                if (Directory.Exists(String.Format("{0}\\cashe\\letter\\", wd)) == false)
                    Directory.CreateDirectory(String.Format("{0}\\cashe\\letter\\", wd));
                button10.PerformClick();
            }
            catch (Exception ex) { };
            label7.Text = listBox1.Items.Count.ToString();
        }

Дополнительно для отображения писем в listBox1
Кликните здесь для просмотра всего текста
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
        
private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            Size sz = new Size(listBox1.ClientSize.Width, int.MaxValue);
            TextFormatFlags flags = TextFormatFlags.WordBreak;
            int padding = 3;
            int borders = listBox1.Height - listBox1.ClientSize.Height;
            Font bold_font = new Font(this.Font, FontStyle.Bold);
            Size sz1 = TextRenderer.MeasureText(listBox1.Items[e.Index].ToString(), listBox1.Font, sz, flags);
            sz.Width -= 83;
            Size sz2 = TextRenderer.MeasureText(li_mail[e.Index].Otpr.ToString(), bold_font, sz, flags);
            int h = sz1.Height+sz2.Height + borders + padding;
            e.ItemHeight = h;
            if ((listBox1.Items[e.Index].ToString() == "") && (li_mail[e.Index].Otpr.ToString() == "")) e.ItemHeight = 20;
 
        }
 
        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds);
            }
            else
            {
                e.Graphics.FillRectangle(Brushes.Beige, e.Bounds);
            }
 
            Size sz = new Size(listBox1.ClientSize.Width, int.MaxValue);
            TextFormatFlags flags = TextFormatFlags.WordBreak;
            Font bold_font = new Font(this.Font, FontStyle.Bold);
            Size sz1 = TextRenderer.MeasureText(listBox1.Items[e.Index].ToString(), listBox1.Font, sz, flags);
            sz.Width -= 83;
            Size sz2 = TextRenderer.MeasureText(li_mail[e.Index].Otpr.ToString(), bold_font, sz, flags);
 
            Rectangle pt = new Rectangle();
            pt.Width = e.Bounds.Width - 3;
            pt.Height = sz1.Height;
            pt.Location = new Point(e.Bounds.Location.X + 2, e.Bounds.Location.Y + sz2.Height+2);
            TextRenderer.DrawText(e.Graphics, listBox1.Items[e.Index].ToString(), this.Font, pt, Color.Black, TextFormatFlags.WordBreak);
            pt.Width = e.Bounds.Width - 83;
            pt.Height = sz2.Height;
            pt.Location = new Point(e.Bounds.Location.X + 2, e.Bounds.Location.Y + 2);
 
            TextRenderer.DrawText(e.Graphics, li_mail[e.Index].Otpr.ToString(), bold_font, pt, Color.Black, TextFormatFlags.WordBreak);
            pt.Width = 80;
            pt.Height = 20;
            pt.Location = new Point(e.Bounds.Width - 83, e.Bounds.Location.Y + 2);
            TextRenderer.DrawText(e.Graphics, li_mail[e.Index].data_o.ToString("hh:mm dd.MM"), bold_font, pt, Color.Black, TextFormatFlags.WordBreak);
            e.DrawFocusRectangle();
        }
 
        private void Form1_ResizeEnd(object sender, EventArgs e)
        {
            listBox1.EndUpdate();
        }
 
        private void Form1_ResizeBegin(object sender, EventArgs e)
        {
            listBox1.BeginUpdate();
        }

З. Ы. показывает все входящие, работает только с учеткой по умолчанию(если учетка не по умолчанию честно говоря даже не помню работает оно или нет).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2017, 04:50
Помогаю со студенческими работами здесь

Ошибка при входе на сервер входящей почты IMAP в Microsoft Outlook
Вход на сервер входящей почты (IMAP): Соединение с сервером было прервано. Если ошибка повторится, обратитесь к администратору сервера или...

Обработка входящей почты
Разбираюсь в работе с почтовыми базами. Встала задача, обрабатывать всю входящую почту, присланную на определённый ящик, после этого ,...

Запрос через Outlook, обработка в Excel, ответ через Outlook
Уважаемые VB &amp; VBA_ програмисты! Насколько возможно реализовать следующую задачу, домашними (MS) средствами: 1. Получение...

БД Контроль статуса отправленной корреспонденции
Помогите дописать БД. Ситуация следующая: Имеется около 70 клиентов и для каждого я готовлю счета, акты, договора, спецификации. Далее...

Обработка писем в Outlook
Форумчане, здравствуйте. Прошу помочь с решением такой задачи: Как можно реализовать такую ситуацию - при снятии/изменении отметки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru