111 lines
3.5 KiB
C#
Raw Normal View History

using BankContracts.BusinessLogicsContracts;
using BankContracts.BindingModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using MailKit.Net.Pop3;
using MailKit.Security;
using BankDataModels.Enums;
using DocumentFormat.OpenXml.EMMA;
using BankContracts.BindingModels.Messages;
namespace BankBusinessLogic.MailWorker
{
// Класс, отвечающий за отправку письма на почту
public class MailKitWorker
{
private string _mailLogin = string.Empty;
private string _mailPassword = string.Empty;
private string _smtpClientHost = string.Empty;
private int _smtpClientPort;
private readonly ILogger logger;
// Конструктор
public MailKitWorker(ILogger<MailKitWorker> logger)
{
this.logger = logger;
}
public void MailConfig(MailConfigBindingModel config)
{
_mailLogin = config.MailLogin;
_mailPassword = config.MailPassword;
_smtpClientHost = config.SmtpClientHost;
_smtpClientPort = config.SmtpClientPort;
}
public async void 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;
MemoryStream ms = new(info.File);
if (info.Role == MailsEnum.Клиент)
{
if (info.TypeDoc == TypeDocEnum.PDF)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_клиента.pdf", "application/pdf"));
}
if (info.TypeDoc == TypeDocEnum.EXCEL)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_клиента.xlsx", "application/xlsx"));
}
if (info.TypeDoc == TypeDocEnum.WORD)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_клиента.docx", "application/docx"));
}
}
else
{
if (info.TypeDoc == TypeDocEnum.PDF)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_кассира.pdf", "application/pdf"));
}
if (info.TypeDoc == TypeDocEnum.EXCEL)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_кассира.xlsx", "application/xlsx"));
}
if (info.TypeDoc == TypeDocEnum.WORD)
{
objMailMessage.Attachments.Add(new Attachment(ms, "Отчёт_для_кассира.docx", "application/docx"));
}
}
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;
}
}
}
}