Забыли пароль?

В данной статье я хочу поделиться отличным примером работы с почтой на C# через протокол POP3. Данный пример демонстрирует загрузку сообщений из email, сохранение имеющихся в сообщениях вложений, а так же удаление сообщений из почтового ящика.


Работа с протоколом POP3 осуществляется с использованием библиотеки OpenPop.NET, об установке которой и подключению ее к проекту я уже рассказывал в предыдущей статье.

В качестве примера я приведу код формы проекта в котором все понятно из комментариев. На форме находится два компонента – кнопка и listView. По нажатию на кнопку запускается загрузка сообщений из почтового ящика. В компоненте listView отображается информация о загруженных сообщениях. Все вложения сохраняются на жесткий диск C в папку folder. Сообщения, содержащие вложения, после загрузки удаляются из почтового ящика.

Код Form1.cs:

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 OpenPop.Mime;
using OpenPop.Pop3;
using OpenPop.Common;

using Message = OpenPop.Mime.Message;

namespace ReadMail
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
// Используем using чтобы соединение автоматически закрывалось
using (OpenPop.Pop3.Pop3Client client = new Pop3Client())
{
// Подключение к серверу
client.Connect(«pop.mail.ru», 995, true);

// Аутентификация (проверка логина и пароля)
client.Authenticate(«ящик@mail.ru», «password», AuthenticationMethod.UsernameAndPassword);

if (client.Connected)
{
// Получение количества сообщений в почтовом ящике
int messageCount = client.GetMessageCount();

// Выделяем память под список сообщений. Мы хотим получить все сообщения
List<Message> allMessages = new List<Message>(messageCount);

// Сообщения нумеруются от 1 до messageCount включительно
// Другим языком нумерация начинается с единицы
// Большинство серверов присваивают новым сообщениям наибольший номер (чем меньше номер тем старее сообщение)
// Т.к. цикл начинается с messageCount, то последние сообщения должны попасть в начало списка
for (int i = messageCount; i > 0; i—)
{
allMessages.Add(client.GetMessage(i));

Message message = client.GetMessage(i);

string subject = message.Headers.Subject; //заголовок
string date = message.Headers.Date.ToString(); //Дата/Время
string from = message.Headers.From.ToString(); //от кого
string body = «»;

// ищем первую плейнтекст версию в сообщении
MessagePart mpPlain = message.FindFirstPlainTextVersion();

if (mpPlain != null)
{
Encoding enc = mpPlain.BodyEncoding;
body = enc.GetString(mpPlain.Body); //получаем текст сообщения
}

ListViewItem mes = new ListViewItem(new string[] { subject, date, from, body });
listView1.Items.Add(mes);
}

//Ищем во всех письмах все вложения
for (int i = 0; i < messageCount; i++)
{
Message msg = allMessages[i];
var att = msg.FindAllAttachments();
foreach (var ado in att)
{
//сохраняем все найденные в письмах вложения
ado.Save(new System.IO.FileInfo(System.IO.Path.Combine(«c:\\folder», ado.FileName)));
}

//если в письме были вложения, удаляем данное письмо
if (att.Count > 0) client.DeleteMessage(messageCount — i);
}
}
}

}
}
}

2 комментария к “Работы с email на C# через протокол POP3 используя OpenPop.NET”

  1. Зачем делать код курсивом?

  2. Исправил

Оставить комментарий