diff --git a/PrecastConcretePlant/PrecastConcretePlant/App.config b/PrecastConcretePlant/PrecastConcretePlant/App.config
new file mode 100644
index 0000000..400d322
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlant/App.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+	<appSettings>
+		<add key="SmtpClientHost" value="smtp.mail.ru" />
+		<add key="SmtpClientPort" value="587" />
+		<add key="PopHost" value="pop.mail.ru" />
+		<add key="PopPort" value="995" />
+		<add key="MailLogin" value="ordersender228@mail.ru" />
+		<add key="MailPassword" value="v8czsQ8zztJc5wEHxKPN" />
+	</appSettings>
+</configuration>
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs b/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
index da5eaff..4cff5b1 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
@@ -43,6 +43,7 @@
             this.ReinforcedComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.письмаToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
             this.menuStrip1.SuspendLayout();
             this.SuspendLayout();
@@ -97,7 +98,8 @@
             this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.справочникиToolStripMenuItem,
             this.reportsToolStripMenuItem,
-            this.запускРаботToolStripMenuItem});
+            this.запускРаботToolStripMenuItem,
+            this.письмаToolStripMenuItem});
             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
             this.menuStrip1.Name = "menuStrip1";
             this.menuStrip1.Size = new System.Drawing.Size(1304, 24);
@@ -118,28 +120,28 @@
             // reinforcedToolStripMenuItem
             // 
             this.reinforcedToolStripMenuItem.Name = "reinforcedToolStripMenuItem";
-            this.reinforcedToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
+            this.reinforcedToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.reinforcedToolStripMenuItem.Text = "Изделия";
             this.reinforcedToolStripMenuItem.Click += new System.EventHandler(this.ReinforcedToolStripMenuItem_Click);
             // 
             // componentToolStripMenuItem
             // 
             this.componentToolStripMenuItem.Name = "componentToolStripMenuItem";
-            this.componentToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
+            this.componentToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.componentToolStripMenuItem.Text = "Компоненты";
             this.componentToolStripMenuItem.Click += new System.EventHandler(this.ComponentsToolStripMenuItem_Click);
             // 
             // clientsToolStripMenuItem
             // 
             this.clientsToolStripMenuItem.Name = "clientsToolStripMenuItem";
-            this.clientsToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
+            this.clientsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.clientsToolStripMenuItem.Text = "Клиенты";
             this.clientsToolStripMenuItem.Click += new System.EventHandler(this.ClientsToolStripMenuItem_Click);
             // 
             // исполнителиToolStripMenuItem
             // 
             this.исполнителиToolStripMenuItem.Name = "исполнителиToolStripMenuItem";
-            this.исполнителиToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
+            this.исполнителиToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
             this.исполнителиToolStripMenuItem.Text = "Исполнители";
             this.исполнителиToolStripMenuItem.Click += new System.EventHandler(this.ImplementersToolStripMenuItem_Click);
             // 
@@ -181,6 +183,13 @@
             this.запускРаботToolStripMenuItem.Text = "Запуск работ";
             this.запускРаботToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click);
             // 
+            // письмаToolStripMenuItem
+            // 
+            this.письмаToolStripMenuItem.Name = "письмаToolStripMenuItem";
+            this.письмаToolStripMenuItem.Size = new System.Drawing.Size(62, 20);
+            this.письмаToolStripMenuItem.Text = "Письма";
+            this.письмаToolStripMenuItem.Click += new System.EventHandler(this.MailToolStripMenuItem_Click);
+            // 
             // FormMain
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@@ -219,5 +228,6 @@
         private ToolStripMenuItem clientsToolStripMenuItem;
         private ToolStripMenuItem исполнителиToolStripMenuItem;
         private ToolStripMenuItem запускРаботToolStripMenuItem;
+        private ToolStripMenuItem письмаToolStripMenuItem;
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
index 60162f6..9d3b93c 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
@@ -215,5 +215,14 @@ namespace PrecastConcretePlantView
             MessageBox.Show("Процесс обработки запущен", "Сообщение",
             MessageBoxButtons.OK, MessageBoxIcon.Information);
         }
+
+        private void MailToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            var service = Program.ServiceProvider?.GetService(typeof(FormViewMail));
+            if (service is FormViewMail form)
+            {
+                form.ShowDialog();
+            }
+        }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.Designer.cs b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.Designer.cs
new file mode 100644
index 0000000..07f5131
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.Designer.cs
@@ -0,0 +1,63 @@
+namespace PrecastConcretePlantView
+{
+	partial class FormViewMail
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.IContainer components = null;
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+		protected override void Dispose(bool disposing)
+		{
+			if (disposing && (components != null))
+			{
+				components.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+
+		#region Windows Form Designer generated code
+
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+            this.dataGridView = new System.Windows.Forms.DataGridView();
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // dataGridView
+            // 
+            this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridView.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dataGridView.Location = new System.Drawing.Point(0, 0);
+            this.dataGridView.Name = "dataGridView";
+            this.dataGridView.RowTemplate.Height = 25;
+            this.dataGridView.Size = new System.Drawing.Size(800, 450);
+            this.dataGridView.TabIndex = 1;
+            // 
+            // FormViewMail
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(800, 450);
+            this.Controls.Add(this.dataGridView);
+            this.Name = "FormViewMail";
+            this.Text = "Письма";
+            this.Load += new System.EventHandler(this.FormViewMail_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+            this.ResumeLayout(false);
+
+		}
+
+		#endregion
+
+		private DataGridView dataGridView;
+	}
+}
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs
new file mode 100644
index 0000000..11f17c4
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs
@@ -0,0 +1,40 @@
+using Microsoft.Extensions.Logging;
+using PrecastConcretePlantContracts.BusinessLogicsContracts;
+
+namespace PrecastConcretePlantView
+{
+    public partial class FormViewMail : Form
+    {
+        private readonly ILogger _logger;
+        private readonly IMessageInfoLogic _logic;
+
+        public FormViewMail(ILogger<FormViewMail> logger, IMessageInfoLogic logic)
+        {
+            InitializeComponent();
+            _logger = logger;
+            _logic = logic;
+        }
+
+        private void FormViewMail_Load(object sender, EventArgs e)
+        {
+            try
+            {
+                var list = _logic.ReadList(null);
+                if (list != null)
+                {
+                    dataGridView.DataSource = list;
+                    dataGridView.Columns["ClientId"].Visible = false;
+                    dataGridView.Columns["MessageId"].Visible = false;
+                    dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+                }
+                _logger.LogInformation("Загрузка списка писем");
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "Ошибка загрузки писем");
+                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
+                MessageBoxIcon.Error);
+            }
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.resx b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.resx
new file mode 100644
index 0000000..f298a7b
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.resx
@@ -0,0 +1,60 @@
+<root>
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlant/PrecastConcretePlantView.csproj b/PrecastConcretePlant/PrecastConcretePlant/PrecastConcretePlantView.csproj
index 3652882..937eefd 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/PrecastConcretePlantView.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlant/PrecastConcretePlantView.csproj
@@ -27,6 +27,9 @@
   </ItemGroup>
 
   <ItemGroup>
+    <None Update="App.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
     <None Update="ReportOrders.rdlc">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
diff --git a/PrecastConcretePlant/PrecastConcretePlant/Program.cs b/PrecastConcretePlant/PrecastConcretePlant/Program.cs
index 92a0b82..3cf23ba 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/Program.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/Program.cs
@@ -9,6 +9,8 @@ using Microsoft.Extensions.Logging;
 using NLog.Extensions.Logging;
 using PrecastConcretePlantBusinessLogic.OfficePackage.Implement;
 using PrecastConcretePlantBusinessLogic.OfficePackage;
+using PrecastConcretePlantBusinessLogic.MailWorker;
+using PrecastConcretePlantContracts.BindingModels;
 
 namespace PrecastConcretePlant
 
@@ -29,6 +31,27 @@ namespace PrecastConcretePlant
             var services = new ServiceCollection();
             ConfigureServices(services);
             _serviceProvider = services.BuildServiceProvider();
+            try
+            {
+                var mailSender = _serviceProvider.GetService<AbstractMailWorker>();
+                mailSender?.MailConfig(new MailConfigBindingModel
+                {
+                    MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty,
+                    MailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"] ?? string.Empty,
+                    SmtpClientHost = System.Configuration.ConfigurationManager.AppSettings["SmtpClientHost"] ?? string.Empty,
+                    SmtpClientPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SmtpClientPort"]),
+                    PopHost = System.Configuration.ConfigurationManager.AppSettings["PopHost"] ?? string.Empty,
+                    PopPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PopPort"])
+                });
+
+                // ������� ������
+                var timer = new System.Threading.Timer(new TimerCallback(MailCheck!), null, 0, 100000);
+            }
+            catch (Exception ex)
+            {
+                var logger = _serviceProvider.GetService<ILogger>();
+                logger?.LogError(ex, "������ ������ � ������");
+            }
             Application.Run(_serviceProvider.GetRequiredService<FormMain>());
         }
 
@@ -59,6 +82,8 @@ namespace PrecastConcretePlant
             services.AddTransient<AbstractSaveToWord, SaveToWord>();
             services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
 
+            services.AddSingleton<AbstractMailWorker, MailKitWorker>();
+
             services.AddTransient<FormMain>();
             services.AddTransient<FormComponent>();
             services.AddTransient<FormComponents>();
@@ -71,6 +96,9 @@ namespace PrecastConcretePlant
             services.AddTransient<FormClients>();
             services.AddTransient<FormViewImplementers>();
             services.AddTransient<FormImplementer>();
+            services.AddTransient<FormViewMail>();
         }
+
+        private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck();
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/ClientLogic.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/ClientLogic.cs
index 7061b8b..25167e9 100644
--- a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/ClientLogic.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/ClientLogic.cs
@@ -4,6 +4,7 @@ using PrecastConcretePlantContracts.BusinessLogicsContracts;
 using PrecastConcretePlantContracts.SearchModels;
 using PrecastConcretePlantContracts.StoragesContract;
 using PrecastConcretePlantContracts.ViewModels;
+using System.Text.RegularExpressions;
 
 namespace PrecastConcretePlantBusinessLogic.BusinessLogic
 {
@@ -101,6 +102,14 @@ namespace PrecastConcretePlantBusinessLogic.BusinessLogic
             {
                 throw new ArgumentNullException("Нет логина клиента", nameof(model.Email));
             }
+            if (!Regex.IsMatch(model.Email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"))
+            {
+                throw new ArgumentException("Некорретно введенный email", nameof(model.Email));
+            }
+            if (!Regex.IsMatch(model.Password, @"^(?=.*\d)(?=.*\W)(?=.*[^\d\s]).+$"))
+            {
+                throw new ArgumentException("Некорректно  введенный пароль. Пароль должен содержать хотя бы одну букву, цифру и не буквенный символ", nameof(model.Password));
+            }
             _logger.LogInformation("Client. Id: {Id}, FIO: {fio}, email: {email}", model.Id, model.ClientFIO, model.Email);
             var element = _clientStorage.GetElement(new ClientSearchModel
             {
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/OrderLogic.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/OrderLogic.cs
index 47dbedf..d40a90e 100644
--- a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/OrderLogic.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/OrderLogic.cs
@@ -1,4 +1,5 @@
 using Microsoft.Extensions.Logging;
+using PrecastConcretePlantBusinessLogic.MailWorker;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
 using PrecastConcretePlantContracts.SearchModels;
@@ -12,10 +13,15 @@ namespace PrecastConcretePlantBusinessLogic.BusinessLogic
     {
         private readonly ILogger _logger;
         private readonly IOrderStorage _orderStorage;
-        public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
+        private readonly AbstractMailWorker _mailWorker;
+        private readonly IClientLogic _clientLogic;
+
+        public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage, AbstractMailWorker mailWorker, IClientLogic clientLogic)
         {
             _logger = logger;
             _orderStorage = orderStorage;
+            _mailWorker = mailWorker;
+            _clientLogic = clientLogic;
         }
 
         public bool CreateOrder(OrderBindingModel model)
@@ -28,11 +34,13 @@ namespace PrecastConcretePlantBusinessLogic.BusinessLogic
             }
             model.Status = OrderStatus.Принят;
             model.DateCreate = DateTime.Now;
-            if (_orderStorage.Insert(model) == null)
+            var result = _orderStorage.Insert(model);
+            if (result == null)
             {
                 _logger.LogWarning("Insert operation failed");
                 return false;
             }
+            SendOrderStatusMail(result.ClientId, $"Новый заказ создан. Номер заказа #{result.Id}", $"Заказ #{result.Id} от {result.DateCreate} на сумму {result.Sum:0.00} принят");
             return true;
         }
 
@@ -102,11 +110,13 @@ namespace PrecastConcretePlantBusinessLogic.BusinessLogic
             model.ReinforcedId = vmodel.ReinforcedId;
             model.Sum = vmodel.Sum;
             model.Count = vmodel.Count;
-            if (_orderStorage.Update(model) == null)
+            var result = _orderStorage.Update(model);
+            if (result == null)
             {
                 _logger.LogWarning("Update operation failed");
                 return false;
             }
+            SendOrderStatusMail(result.ClientId, $"Изменен статус заказа #{result.Id}", $"Заказ #{model.Id} изменен статус на {result.Status}");
             return true;
         }
 
@@ -126,5 +136,21 @@ namespace PrecastConcretePlantBusinessLogic.BusinessLogic
             _logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
             return element;
         }
+
+        private bool SendOrderStatusMail(int clientId, string subject, string text)
+        {
+            var client = _clientLogic.ReadElement(new() { Id = clientId });
+            if (client == null)
+            {
+                return false;
+            }
+            _mailWorker.MailSendAsync(new()
+            {
+                MailAddress = client.Email,
+                Subject = subject,
+                Text = text
+            });
+            return true;
+        }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/AbstractMailWorker.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/AbstractMailWorker.cs
new file mode 100644
index 0000000..fef19b5
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/AbstractMailWorker.cs
@@ -0,0 +1,95 @@
+using Microsoft.Extensions.Logging;
+using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.BusinessLogicsContracts;
+
+namespace PrecastConcretePlantBusinessLogic.MailWorker
+{
+    public abstract class AbstractMailWorker
+    {
+        protected string _mailLogin = string.Empty;
+
+        protected string _mailPassword = string.Empty;
+
+        protected string _smtpClientHost = string.Empty;
+
+        protected int _smtpClientPort;
+
+        protected string _popHost = string.Empty;
+
+        protected int _popPort;
+
+        private readonly IMessageInfoLogic _messageInfoLogic;
+        private readonly IClientLogic _clientLogic;
+
+        private readonly ILogger _logger;
+
+        public AbstractMailWorker(ILogger<AbstractMailWorker> logger, IMessageInfoLogic messageInfoLogic, IClientLogic clientLogic)
+        {
+            _logger = logger;
+            _messageInfoLogic = messageInfoLogic;
+            _clientLogic = clientLogic;
+        }
+
+        public void MailConfig(MailConfigBindingModel config)
+        {
+            _mailLogin = config.MailLogin;
+            _mailPassword = config.MailPassword;
+            _smtpClientHost = config.SmtpClientHost;
+            _smtpClientPort = config.SmtpClientPort;
+            _popHost = config.PopHost;
+            _popPort = config.PopPort;
+            _logger.LogDebug("Config: {login}, {password}, {clientHost}, {clientPOrt}, {popHost}, {popPort}", _mailLogin, _mailPassword, _smtpClientHost, _smtpClientPort, _popHost, _popPort);
+        }
+
+        public async void MailSendAsync(MailSendInfoBindingModel info)
+        {
+            if (string.IsNullOrEmpty(_mailLogin) || string.IsNullOrEmpty(_mailPassword))
+            {
+                return;
+            }
+
+            if (string.IsNullOrEmpty(_smtpClientHost) || _smtpClientPort == 0)
+            {
+                return;
+            }
+
+            if (string.IsNullOrEmpty(info.MailAddress) || string.IsNullOrEmpty(info.Subject) || string.IsNullOrEmpty(info.Text))
+            {
+                return;
+            }
+
+            _logger.LogDebug("Send Mail: {To}, {Subject}", info.MailAddress, info.Subject);
+            await SendMailAsync(info);
+        }
+
+        public async void MailCheck()
+        {
+            if (string.IsNullOrEmpty(_mailLogin) || string.IsNullOrEmpty(_mailPassword))
+            {
+                return;
+            }
+
+            if (string.IsNullOrEmpty(_popHost) || _popPort == 0)
+            {
+                return;
+            }
+
+            if (_messageInfoLogic == null)
+            {
+                return;
+            }
+
+            var list = await ReceiveMailAsync();
+            _logger.LogDebug("Check Mail: {Count} new mails", list.Count);
+            foreach (var mail in list)
+            {
+                mail.ClientId = _clientLogic.ReadElement(new() { Email = mail.SenderName })?.Id;
+                _messageInfoLogic.Create(mail);
+            }
+        }
+
+        protected abstract Task SendMailAsync(MailSendInfoBindingModel info);
+
+        protected abstract Task<List<MessageInfoBindingModel>> ReceiveMailAsync();
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/MailKitWorker.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/MailKitWorker.cs
new file mode 100644
index 0000000..79b4ff1
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/MailWorker/MailKitWorker.cs
@@ -0,0 +1,78 @@
+using Microsoft.Extensions.Logging;
+using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using System.Net.Mail;
+using System.Net;
+using System.Text;
+using MailKit.Net.Pop3;
+using MailKit.Security;
+
+namespace PrecastConcretePlantBusinessLogic.MailWorker
+{
+    public class MailKitWorker : AbstractMailWorker
+    {
+        public MailKitWorker(ILogger<MailKitWorker> logger, IMessageInfoLogic messageInfoLogic, IClientLogic clientLogic) : base(logger, messageInfoLogic, clientLogic) { }
+
+        protected override async Task SendMailAsync(MailSendInfoBindingModel info)
+        {
+            using var objMailMessage = new MailMessage();
+            using var objSmtpClient = new SmtpClient(_smtpClientHost, _smtpClientPort);
+            try
+            {
+                objMailMessage.From = new MailAddress(_mailLogin);
+                objMailMessage.To.Add(new MailAddress(info.MailAddress));
+                objMailMessage.Subject = info.Subject;
+                objMailMessage.Body = info.Text;
+                objMailMessage.SubjectEncoding = Encoding.UTF8;
+                objMailMessage.BodyEncoding = Encoding.UTF8;
+
+                objSmtpClient.UseDefaultCredentials = false;
+                objSmtpClient.EnableSsl = true;
+                objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
+                objSmtpClient.Credentials = new NetworkCredential(_mailLogin, _mailPassword);
+
+                await Task.Run(() => objSmtpClient.Send(objMailMessage));
+            }
+            catch (Exception)
+            {
+                throw;
+            }
+        }
+
+        protected override async Task<List<MessageInfoBindingModel>> ReceiveMailAsync()
+        {
+            var list = new List<MessageInfoBindingModel>();
+            using var client = new Pop3Client();
+            await Task.Run(() =>
+            {
+                try
+                {
+                    client.Connect(_popHost, _popPort, SecureSocketOptions.SslOnConnect);
+                    client.Authenticate(_mailLogin, _mailPassword);
+                    for (int i = 0; i < client.Count; i++)
+                    {
+                        var message = client.GetMessage(i);
+                        foreach (var mail in message.From.Mailboxes)
+                        {
+                            list.Add(new MessageInfoBindingModel
+                            {
+                                DateDelivery = message.Date.DateTime,
+                                MessageId = message.MessageId,
+                                SenderName = mail.Address,
+                                Subject = message.Subject,
+                                Body = message.TextBody
+                            });
+                        }
+                    }
+                }
+                catch (AuthenticationException)
+                { }
+                finally
+                {
+                    client.Disconnect(true);
+                }
+            });
+            return list;
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/PrecastConcretePlantBusinessLogic.csproj b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/PrecastConcretePlantBusinessLogic.csproj
index ee1ab6d..19cf968 100644
--- a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/PrecastConcretePlantBusinessLogic.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/PrecastConcretePlantBusinessLogic.csproj
@@ -8,6 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="DocumentFormat.OpenXml" Version="2.19.0" />
+    <PackageReference Include="MailKit" Version="4.0.0" />
     <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
     <PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
   </ItemGroup>
diff --git a/PrecastConcretePlant/PrecastConcretePlantClientApp/Controllers/HomeController.cs b/PrecastConcretePlant/PrecastConcretePlantClientApp/Controllers/HomeController.cs
index d857848..d527a8a 100644
--- a/PrecastConcretePlant/PrecastConcretePlantClientApp/Controllers/HomeController.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantClientApp/Controllers/HomeController.cs
@@ -143,5 +143,15 @@ namespace PrecastConcretePlantClientApp.Controllers
             var prod = APIClient.GetRequest<ReinforcedViewModel>($"api/main/getReinforced?ReinforcedId={Reinforced}");
             return count * (prod?.Price ?? 1);
         }
+
+        [HttpGet]
+        public IActionResult Mails()
+        {
+            if (APIClient.Client == null)
+            {
+                return Redirect("~/Home/Enter");
+            }
+            return View(APIClient.GetRequest<List<MessageInfoViewModel>>($"api/client/getmessages?clientId={APIClient.Client.Id}"));
+        }
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Home/Mails.cshtml b/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Home/Mails.cshtml
new file mode 100644
index 0000000..21cd9b6
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Home/Mails.cshtml
@@ -0,0 +1,54 @@
+@using PrecastConcretePlantContracts.ViewModels
+
+@model List<MessageInfoViewModel>
+
+@{
+	ViewData["Title"] = "Mails";
+}
+
+<div class="text-center">
+	<h1 class="display-4">Письма</h1>
+</div>
+
+
+<div class="text-center">
+	@{
+		if (Model == null)
+		{
+							<h3 class="display-4">Авторизируйтесь</h3>
+			return;
+		}
+
+				<table class="table">
+					<thead>
+						<tr>
+							<th>
+								Дата письма
+							</th>
+							<th>
+								Заголовок
+							</th>
+							<th>
+								Текст
+							</th>
+						</tr>
+					</thead>
+					<tbody>
+				@foreach (var item in Model)
+				{
+									<tr>
+										<td>
+							@Html.DisplayFor(modelItem => item.DateDelivery)
+										</td>
+										<td>
+							@Html.DisplayFor(modelItem => item.Subject)
+										</td>
+										<td>
+							@Html.DisplayFor(modelItem => item.Body)
+										</td>
+									</tr>
+				}
+					</tbody>
+				</table>
+	}
+</div>
diff --git a/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Shared/_Layout.cshtml b/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Shared/_Layout.cshtml
index 5b962b1..06c09bf 100644
--- a/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Shared/_Layout.cshtml
+++ b/PrecastConcretePlant/PrecastConcretePlantClientApp/Views/Shared/_Layout.cshtml
@@ -28,6 +28,9 @@
                         <li class="nav-item">
                             <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Личные данные</a>
                         </li>
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Mails">Письма</a>
+                        </li>
                         <li class="nav-item">
                             <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Enter">Вход</a>
                         </li>
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailConfigBindingModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailConfigBindingModel.cs
new file mode 100644
index 0000000..04afe11
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailConfigBindingModel.cs
@@ -0,0 +1,12 @@
+namespace PrecastConcretePlantContracts.BindingModels
+{
+    public class MailConfigBindingModel
+    {
+        public string MailLogin { get; set; } = string.Empty;
+        public string MailPassword { get; set; } = string.Empty;
+        public string SmtpClientHost { get; set; } = string.Empty;
+        public int SmtpClientPort { get; set; }
+        public string PopHost { get; set; } = string.Empty;
+        public int PopPort { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailSendInfoBindingModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailSendInfoBindingModel.cs
new file mode 100644
index 0000000..1cdb830
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MailSendInfoBindingModel.cs
@@ -0,0 +1,9 @@
+namespace PrecastConcretePlantContracts.BindingModels
+{
+    public class MailSendInfoBindingModel
+    {
+        public string MailAddress { get; set; } = string.Empty;
+        public string Subject { get; set; } = string.Empty;
+        public string Text { get; set; } = string.Empty;
+    }
+}
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantRestApi/Controllers/ClientController.cs b/PrecastConcretePlant/PrecastConcretePlantRestApi/Controllers/ClientController.cs
index 091368c..40fe9ff 100644
--- a/PrecastConcretePlant/PrecastConcretePlantRestApi/Controllers/ClientController.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantRestApi/Controllers/ClientController.cs
@@ -14,10 +14,13 @@ namespace PrecastConcretePlantRestApi.Controllers
 
         private readonly IClientLogic _logic;
 
-        public ClientController(IClientLogic logic, ILogger<ClientController> logger)
+        private readonly IMessageInfoLogic _mailLogic;
+
+        public ClientController(IClientLogic logic, IMessageInfoLogic mailLogic, ILogger<ClientController> logger)
         {
             _logger = logger;
             _logic = logic;
+            _mailLogic = mailLogic;
         }
 
         [HttpGet]
@@ -66,5 +69,22 @@ namespace PrecastConcretePlantRestApi.Controllers
                 throw;
             }
         }
+
+        [HttpGet]
+        public List<MessageInfoViewModel>? GetMessages(int clientId)
+        {
+            try
+            {
+                return _mailLogic.ReadList(new MessageInfoSearchModel
+                {
+                    ClientId = clientId
+                });
+            }
+            catch (Exception ex)
+            {
+                _logger.LogError(ex, "Ошибка получения писем клиента");
+                throw;
+            }
+        }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantRestApi/Program.cs b/PrecastConcretePlant/PrecastConcretePlantRestApi/Program.cs
index 02d5d5c..674daf3 100644
--- a/PrecastConcretePlant/PrecastConcretePlantRestApi/Program.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantRestApi/Program.cs
@@ -3,6 +3,8 @@ using PrecastConcretePlantContracts.BusinessLogicsContracts;
 using PrecastConcretePlantContracts.StoragesContract;
 using PrecastConcretePlantDatabaseImplement;
 using Microsoft.OpenApi.Models;
+using PrecastConcretePlantBusinessLogic.MailWorker;
+using PrecastConcretePlantContracts.BindingModels;
 
 var builder = WebApplication.CreateBuilder(args);
 
@@ -13,11 +15,16 @@ builder.Services.AddTransient<IClientStorage, ClientStorage>();
 builder.Services.AddTransient<IOrderStorage, OrderStorage>();
 builder.Services.AddTransient<IReinforcedStorage, ReinforcedStorage>();
 builder.Services.AddTransient<IImplementerStorage, ImplementerStorage>();
+builder.Services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
+builder.Services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
 
 builder.Services.AddTransient<IOrderLogic, OrderLogic>();
 builder.Services.AddTransient<IClientLogic, ClientLogic>();
 builder.Services.AddTransient<IImplementerLogic, ImplementerLogic>();
 builder.Services.AddTransient<IReinforcedLogic, ReinforcedLogic>();
+
+builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
+
 builder.Services.AddControllers();
 
 // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
@@ -31,6 +38,18 @@ builder.Services.AddSwaggerGen(c =>
     });
 });
 var app = builder.Build();
+var mailSender = app.Services.GetService<AbstractMailWorker>();
+
+mailSender?.MailConfig(new MailConfigBindingModel
+{
+    MailLogin = builder.Configuration?.GetSection("MailLogin")?.Value?.ToString() ?? string.Empty,
+    MailPassword = builder.Configuration?.GetSection("MailPassword")?.Value?.ToString() ?? string.Empty,
+    SmtpClientHost = builder.Configuration?.GetSection("SmtpClientHost")?.Value?.ToString() ?? string.Empty,
+    SmtpClientPort = Convert.ToInt32(builder.Configuration?.GetSection("SmtpClientPort")?.Value?.ToString()),
+    PopHost = builder.Configuration?.GetSection("PopHost")?.Value?.ToString() ?? string.Empty,
+    PopPort = Convert.ToInt32(builder.Configuration?.GetSection("PopPort")?.Value?.ToString())
+});
+
 // Configure the HTTP request pipeline.
 if (app.Environment.IsDevelopment())
 {
diff --git a/PrecastConcretePlant/PrecastConcretePlantRestApi/appsettings.json b/PrecastConcretePlant/PrecastConcretePlantRestApi/appsettings.json
index 10f68b8..697acfb 100644
--- a/PrecastConcretePlant/PrecastConcretePlantRestApi/appsettings.json
+++ b/PrecastConcretePlant/PrecastConcretePlantRestApi/appsettings.json
@@ -5,5 +5,12 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
-  "AllowedHosts": "*"
+  "AllowedHosts": "*",
+
+  "SmtpClientHost": "smtp.mail.ru",
+  "SmtpClientPort": "587",
+  "PopHost": "pop.mail.ru",
+  "PopPort": "995",
+  "MailLogin": "ordersender228@mail.ru",
+  "MailPassword": "v8czsQ8zztJc5wEHxKPN"
 }