
- C# API для імплементації потоків електронної пошти
- Що таке потоки електронної пошти?
- Створення потоків електронної пошти
- Сумісність потокового з’єднання електронної пошти з IMAP
- Отримання потоків електронної пошти за допомогою можливості THREAD
- Отримання потоків електронної пошти за допомогою розширення X-GM-EXT-1
Чи ви є індивідуальним користувачем електронної пошти або великою компанією, ваша пошта може переповнитися повідомленнями. Часто важко відслідковувати розмови, і їхнє управління може швидко стати складним завданням. Саме тут на допомогу приходить потокове з’єднання, що дозволяє нам організовувати та слідкувати за обговореннями без зусиль.
У цій статті ми дослідимо основи потокового з’єднання електронної пошти та надамо всебічний посібник з використання ImapClient у C# .NET для легкого управління потоковими розмовами.
C# API для імплементації потоків електронної пошти
Простий спосіб імплементувати потоки електронної пошти у вашій програмі - це використання Aspose.Email для .NET. Це універсальна бібліотека, яка надає можливість розробникам ефективно обробляти електронні листи, включаючи створення, маніпуляцію, парсинг, конверсію та управління вкладеннями, календарями та контактами у своїх .NET програмах. Щоб отримати API, ви можете завантажити його DLL або встановити з NuGet, використовуючи наступну команду:
PM> Install-Package Aspose.Email
Що таке потоки електронної пошти?
Потоки електронної пошти - це техніка, яка організовує ієрархічно всі розкидані відповіді та пересилання в вашій поштовій скриньці та представляє їх у узгодженому вигляді. Цей метод особливо цінний при роботі з тривалими електронними обмінами, які залучають кілька учасників. Увесь процес базується на використанні заголовків для визначення теми та відношення й порядку посилань. Основні заголовки, які використовуються для потокового з’єднання, це:
Message-ID
, унікальний ідентифікатор для кожного електронного повідомленняIn-Reply-To
,Message-ID
електронного листа, на який це повідомлення є відповіддюReferences
, списокMessage-IDs
всіх попередніх повідомлень у розмові
Створення потоків електронної пошти
Однією з функцій, які надає наша потужна бібліотека Aspose.Email для створення та маніпуляції електронними повідомленнями, є потокове з’єднання за допомогою ImapClient.
ImapClient - це клас, який дозволяє вам підключатися до IMAP-сервера та виконувати різноманітні операції з вашою поштовою скринькою. Ви можете використовувати його для перерахунку, отримання, пошуку, переміщення або видалення повідомлень. Він також дозволяє додавати повідомлення та будувати деревоподібну структуру, яка представляє розмову. Наприклад, розглянемо наступний електронний лист:
- A: Привіт, як ти?
- B: У мене все добре, дякую. А ти?
- A: У мене теж все добре. У тебе є плани на вихідні?
- C: Привіт, я приєднуюсь до цієї розмови.
- B: Ласкаво просимо, C. Ми тільки що говорили про вихідні.
- C: О, я зрозумів. Ну, я збираюся відвідати своїх батьків.
Деревоподібна структура цього потоку виглядала б так:
A
└─B
├─A
└─C
├─B
└─C
Кожен вузол у дереві відповідає повідомленню, а кожне ребро відповідає відповіді. Кореневий вузол - це перше повідомлення в потоці, а листові вузли - це останні повідомлення.
Сумісність потокового з’єднання електронної пошти з IMAP
Взагалі, протокол IMAP підтримує можливість THREAD, визначену в RFC-5256 і зрозумілу більшістю поштових серверів. Але, якщо ви працюєте з Gmail, є ще одне розширення IMAP, яке надається Gmail і описується як X-GM-EXT-1.
Aspose.Email має такі властивості для перевірки доступних розширень для поточного IMAP-сервера:
- GmExt1Supported: перевіряє, чи підтримується розширення Gmail X-GM-EXT-1
- ThreadSupported: перевіряє, чи підтримується розширення THREAD
- ThreadAlgorithms: отримує підтримувані алгоритми THREAD
Метод GetMessageThreads у ImapClient повертає колекцію об’єктів MessageThreadResult, що представляють інформацію про повідомлення та його відношення до інших повідомлень у деревоподібній структурі.
Отримання потоків електронної пошти за допомогою можливості THREAD
Наступні приклади коду C# демонструють, як використати функції потокового з’єднання електронної пошти з можливістю THREAD IMAP-сервера.
using (ImapClient client = new ImapClient("imap.domain.com", 993, "username", "password", SecurityOptions.SSLImplicit)) | |
{ | |
client.SelectFolder(ImapFolderInfo.InBox); | |
// get a list of messages that we'll group by conversation | |
var messages = client.ListMessages(); | |
// make sure the IMAP server supports THREAD capability | |
if (client.ThreadSupported) | |
{ | |
foreach (var conversationId in messages | |
// this query just gets unique conversationId for our example | |
.Select(message => message.ConversationId) | |
.Where(conversationId => !string.IsNullOrEmpty(conversationId)).Distinct()) | |
{ | |
// create the necessary search conditions for a thread | |
var conditions = new ThreadSearchConditions | |
{ | |
Algorithm = client.ThreadAlgorithms[0], | |
UseUId = true | |
}; | |
// get results | |
List<MessageThreadResult> conversation = client.GetMessageThreads(conditions); | |
// print the email conversation in hierarchically manner | |
PrintConversaton(string.Empty, conversation, messages); | |
Console.WriteLine(new string('-', 20)); | |
} | |
} | |
} | |
/// <summary> | |
/// Prints the email conversation in hierarchically manner | |
/// </summary> | |
public static void PrintConversaton(string indent, List<MessageThreadResult> conversation, List<ImapMessageInfo> messages) | |
{ | |
foreach (var thread in conversation) | |
{ | |
Console.WriteLine("{0} ({1}) {2}", indent, thread.UniqueId, | |
messages.Find(x => x.UniqueId == thread.UniqueId).Subject); | |
if (thread.ChildMessages.Count != 0) | |
{ | |
PrintConversaton(indent += "-", thread.ChildMessages, messages); | |
} | |
} | |
} |
Отримання потоків електронної пошти за допомогою розширення X-GM-EXT-1
Приклади коду C# нижче демонструють, як отримати потоки електронної пошти через IMAP з сервера Gmail.
using (ImapClient client = new ImapClient("imap.gmail.com", 993, "username", "password", SecurityOptions.SSLImplicit)) | |
{ | |
client.SelectFolder(ImapFolderInfo.InBox); | |
// get a list of messages that we'll group by conversation | |
var messages = client.ListMessages(); | |
// make sure the IMAP server supports X-GM-EXT-1 extension | |
if (client.GmExt1Supported) | |
{ | |
foreach (var conversationId in messages | |
// this query just gets unique conversationId for our example | |
.Select(message => message.ConversationId) | |
.Where(conversationId => !string.IsNullOrEmpty(conversationId)).Distinct()) | |
{ | |
// create the necessary search conditions for a thread | |
var conditions = new XGMThreadSearchConditions | |
{ | |
ConversationId = conversationId, | |
UseUId = true | |
}; | |
// get results | |
List<MessageThreadResult> conversation = client.GetMessageThreads(conditions); | |
// print the email conversation in hierarchically manner | |
PrintConversaton(string.Empty, conversation, messages); | |
Console.WriteLine(new string('-', 20)); | |
} | |
} | |
} | |
/// <summary> | |
/// Prints the email conversation in hierarchically manner | |
/// </summary> | |
public static void PrintConversaton(string indent, List<MessageThreadResult> conversation, List<ImapMessageInfo> messages) | |
{ | |
foreach (var thread in conversation) | |
{ | |
Console.WriteLine("{0} ({1}) {2}", indent, thread.UniqueId, | |
messages.Find(x => x.UniqueId == thread.UniqueId).Subject); | |
if (thread.ChildMessages.Count != 0) | |
{ | |
PrintConversaton(indent += "-", thread.ChildMessages, messages); | |
} | |
} | |
} |
Висновок
Підсумовуючи, тепер ви маєте незамінний інструмент для ефективного управління переповненням повідомлень у вашій поштовій скриньці. Стаття надала вам знання про переваги потокового з’єднання електронної пошти, його використання та інші корисні поради щодо його реалізації. Використовуючи можливості ImapClient у C# .NET, розробники можуть легко впровадити потокове з’єднання електронної пошти за допомогою бібліотеки Aspose.Email. Завдяки своїм всебічним функціям та підтримці різних завдань електронної пошти, Aspose.Email спрощує процес створення потоків електронної пошти, організації повідомлень ієрархічно та представлення їх у узгодженому вигляді. Крім того, ви можете дізнатися, як працювати з кількома іншими форматами файлів електронної пошти та дізнатися більше про API, використовуючи документацію. У разі будь-яких неясностей, будь ласка, не соромтеся зв’язатися з нами на нашому безкоштовному форумі підтримки.