Beispiel #1
0
        public Guid SendReport(InitialReport report)
        {
            var responsible = responsibleFounder.GetResponsible(report.Location);

            Console.WriteLine($"Found responsible: {JsonConvert.SerializeObject(responsible)}");
            if (!responsible.IsActive)
            {
                // todo(sivukhin, 18.05.2019): Handle inactive responsible case
                throw new Exception();
            }

            var fullReport = new Report
            {
                UserId        = report.UserId,
                Subject       = report.Subject,
                Location      = report.Location,
                ReportText    = report.ReportText,
                Attachments   = report.Attachments,
                CreationDate  = DateTime.UtcNow,
                ResponsibleId = responsible.Id,
            };
            var reportId = reportRepository.AddReport(fullReport);

            var user = userRepository.GetUser(report.UserId);

            emailRepository.AddEmail(new EmailMessage
            {
                Body           = messageExtender.ExtendReportText(responsible, user, fullReport),
                Subject        = messageExtender.ExtendSubject(fullReport),
                RecipientEmail = responsible.Email,
                ResponsibleId  = responsible.Id,
                Attachments    = report.Attachments,
            });
            return(reportId);
        }
        public int AddDevOpsEmails()
        {
            _gMailService.setGmailService();

            var messages = _gMailService.getMessages("DevOps", "DevOps");

            var messageCount = messages?.Count ?? 0;

            List <Email> emails = new List <Email> {
            };
            List <Task> tasks   = new List <Task> {
            };

            if (messageCount > 0)
            {
                foreach (var messageId in messages.Select(m => m.Id))
                {
                    var task = Task.Run(() =>
                    {
                        var message            = _gMailService.getMessage(messageId);
                        var messagePartSubject = message.Payload.Headers.FirstOrDefault(h => h.Name == "Subject");
                        var messagePartFrom    = message.Payload.Headers.FirstOrDefault(h => h.Name == "From");
                        var messagePartDate    = (long)message.InternalDate;
                        emails.Add(new Email
                        {
                            Fecha   = DateTimeOffset.FromUnixTimeMilliseconds(messagePartDate).UtcDateTime,
                            From    = messagePartFrom.Value,
                            Subject = messagePartSubject.Value
                        });
                    });
                    tasks.Add(task);
                }
                try
                {
                    Task.WaitAll(tasks.ToArray());
                    emails.ForEach(email => _emailRepository.AddEmail(email));
                }
                catch (AggregateException exceptions)
                {
                    exceptions.InnerExceptions.ToList().ForEach(e =>
                                                                Console.WriteLine($"Something failed when reading/writting the emails {e.Message}"));
                }
            }

            return(emails.Count);
        }
Beispiel #3
0
 public ProcResult AddEmail(EmailViewModel model)
 {
     if (model.EmaidID == 0)
     {
         return(Mapper.Map <ProcResult>(_iEmailRepository.AddEmail(Mapper.Map <MTEmail>(model))));
     }
     else
     {
         return(Mapper.Map <ProcResult>(_iEmailRepository.UpdateEmail(Mapper.Map <MTEmail>(model))));
     }
 }
Beispiel #4
0
        internal async Task Process()
        {
            async Task Send250Ok(string message = null)
            {
                await SendMessageAsync($"250 Ok" + (message == null ? String.Empty : ": " + message));
            }

            try
            {
                this.smtpWriter = this.tcpConnection.GetStream();
                this.smtpReader = new StreamReader(this.smtpWriter, Encoding.UTF8, false, 4069, true);

                await SendMessageAsync("220 " + this.server.Settings.ServiceDomain);

                EmailMessage receivedEmail = new EmailMessage();

                string message;
                while ((message = await ReceiveMessageAsync()) != null)
                {
                    string command = ParseCommand(message);
                    string payload = ParsePayload(message, command);

                    switch (command)
                    {
                    case "HELO":
                        await SendMessageAsync($"250 {this.server.Settings.ServiceDomain} SmtpMoq server responding");

                        break;

                    case "EHLO":
                        await SendMessageAsync($"250 {this.server.Settings.ServiceDomain} SmtpMoq server responding");
                        await SendMessageAsync($"250-SMTPUTF8");

                        break;

                    case "NOOP":
                        await Send250Ok();

                        break;

                    case "QUIT":
                        await SendMessageAsync("221 It was nice talking to you. Bye.");

                        return;

                    case "RSET":
                        receivedEmail = new EmailMessage();
                        await Send250Ok();

                        break;

                    case "MAIL FROM":
                        receivedEmail.From = ExtractString(payload, "<", ">");
                        await Send250Ok();

                        break;

                    case "RCPT TO":
                        string recipient = ExtractString(payload, "<", ">");
                        receivedEmail.Recipients = receivedEmail.Recipients.Concat(new string[] { recipient }).ToArray();
                        await Send250Ok();

                        break;

                    case "DATA":
                        await SendMessageAsync("354 Start mail input; end with <CRLF>.<CRLF>");

                        string        line;
                        StringBuilder receivedData = new StringBuilder();
                        while ((line = await ReceiveMessageAsync()) != ".")
                        {
                            receivedData.Append(line);
                        }
                        receivedEmail.Data = receivedData.ToString();
                        receivedEmail.Guid = Guid.NewGuid();
                        emailRepository.AddEmail(receivedEmail);
                        await Send250Ok("queued as " + receivedEmail.Guid.ToString());

                        break;

                    case "VRFY":
                        await SendMessageAsync("250 " + payload);

                        break;

                    default:
                        await SendMessageAsync("500 Unknow command");

                        break;
                    }
                }
            }
            finally
            {
                this.server.CloseConnection(this.tcpConnection);
            }
        }
Beispiel #5
0
 public void RegisterEmail(string email)
 {
     _emailRepository.AddEmail(email);
 }